CCCPaste

Unit_tests_plantation_27.07.2023

class Plantation:
    def __init__(self, size: int):
        self.size = size
        self.plants = {}
        self.workers = []

    @property
    def size(self):
        return self.__size

    @size.setter
    def size(self, value: int):
        if value < 0:
            raise ValueError("Size must be positive number!")
        self.__size = value

    def hire_worker(self, worker: str):
        if worker in self.workers:
            raise ValueError("Worker already hired!")

        self.workers.append(worker)
        return f"{worker} successfully hired."

    def __len__(self):
        count_of_plants = 0
        for plants_planted in self.plants.values():
            count_of_plants += len(plants_planted)
        return count_of_plants

    def planting(self, worker: str, plant: str):
        if worker not in self.workers:
            raise ValueError(f"Worker with name {worker} is not hired!")

        elif len(self) >= self.size:
            raise ValueError("The plantation is full!")
        if worker in self.plants.keys():
            self.plants[worker].append(plant)
            return f"{worker} planted {plant}."
        self.plants[worker] = [plant]
        return f"{worker} planted it's first {plant}."

    def __str__(self):
        result = [f"Plantation size: {self.size}"]
        result.append(f'{", ".join(self.workers)}')
        for worker, plants in self.plants.items():
            result.append(f"{worker} planted: {', '.join(plants)}")
        return '\n'.join(result)

    def __repr__(self):
        result = ''
        result += f'Size: {self.size}\n'
        result += f'Workers: {", ".join(self.workers)}'
        return result