def test_availability(self):
        """4. Wykupienie całego asortymentu, próba zakupu po wyczerpaniu towaru -
        oczekiwana informacja o braku."""

        test_machine = Machine()
        test_machine.update_availability(30)
        test_machine.update_availability(30)
        test_machine.update_availability(30)
        test_machine.update_availability(30)
        test_machine.update_availability(30)
        state = test_machine.update_availability(30)

        self.assertEqual(state, False)
    def test_make_change(self):
        """3. Wrzucenie większej kwoty, zakup towaru - oczekiwana reszta."""

        test_machine2 = Operations(Tk())
        test_machine2.button_click(36)
        test_machine2.ok_function(36)
        test_machine2.coin_click(1.0)
        test_machine2.coin_click(1.0)
        test_machine2.coin_click(5.0)
        change = Machine().make_change(
            fabs(test_machine2.get_current_amount_test()))
        # cena zwrocona w monetach powinna wygladac --> [0.2, 0.2, 2.0, 2.0]
        self.assertEqual(change, [0.2, 0.2, 2.0, 2.0])
    def test_make_no_change(self):
        """2. Wrzucenie odliczonej kwoty, zakup towaru - oczekiwany brak reszty."""

        test_machine = Operations(Tk())
        test_machine.button_click(36)
        test_machine.ok_function(36)
        test_machine.coin_click(1.0)
        test_machine.coin_click(1.0)
        test_machine.coin_click(0.6)

        change = Machine().make_change(
            fabs(test_machine.get_current_amount_test()))
        self.assertEqual(change, [])
    def test_buy_product_with_1gr(self):
        """8. Zakup towaru płacąc po 1 gr - suma stu monet ma być równa 1zł (dla floatów
        suma sto razy 0.01+0.01+...+0.01 nie będzie równa 1.0). Płatności można dokonać
        za pomocą pętli for w interpreterze."""

        test_machine2 = Operations(Tk())
        test_machine2.button_click(50)
        test_machine2.ok_function(50)
        for i in range(100):
            test_machine2.coin_click(0.01)
        # resta powinna byc rowna 0:
        change = Machine().make_change(
            fabs(test_machine2.get_current_amount_test()))
        self.assertEqual(change, [])
    def button_click(self, item):
        """
        Jesli produkt jest na stanie, wyprowadza jego cene na ekran,
        lub  jesli wprowadzony zostal bledny numer, wyprowadzi informacji o braku dostepnosci.
        """
        self.__stop_flag = False
        self.__entered_coins = []
        self.__number = self.__number + str(item)
        self.input_text1.set(self.__number)
        self.__input_length = len(self.__number)

        if self.__input_length > 1:
            expression2 = copy.copy(self.__number)
            # info ile do zaplaty

            self.__master.after(
                1000, lambda: self.input_text1.set("cena:  " + str(Machine(
                ).zwroc_cene(int(expression2)))))

            try:
                check_if_number_exists(self.__number)

                self.__chosen_no = copy.deepcopy(
                    self.__number)  # zwrca kopie numeru wybranego
                # sprawdzam czy produkt jest w slowniku

                if not Machine().update_availability(self.__number):
                    self.input_text1.set("produkt niedostepny")
                    self.flag = False
                    # clear fun
                    self.clear_all()
                    raise exceptions.LackOfProduct

            except exceptions.InputError:
                print("exception raised")

            self.__number = ""
 def test_get_price(self):
     """1. Sprawdzenie ceny jednego towaru - oczekiwana informacja o cenie."""
     self.assertEqual(Machine().zwroc_cene(32), 3.00)
    def coin_click(self, which_coin):
        """Po wprowadzeniu monety, ile jescze trzeba doplacic aby zakupic produkt."""

        entered_no = int(float(self.get_button_click()))  # dziala jednorazowo
        self.__coin = getdouble(which_coin)
        self.input_coinn.set(
            self.__coin)  # wyswietla na ekranie wrzucona monete
        self.__entered_coins.append(self.__coin)

        if self.__ok_clicked:

            if not self.__exit:  # jesli jeszcze brakuje pieniedzy - self.__price < 0

                if self.__price == 0:
                    self.__price = round(Machine().zwroc_cene(entered_no), 2)

                if not self.__stop_flag:
                    self.__price = round(self.__price - self.__coin, 2)

                    if not self.__thrown_exception:

                        if self.__price > 0:
                            self.input_coinn.set(
                                "brakuje : " +
                                str(abs(round(self.__price, 2))))

                        elif self.__price < 0:
                            try:
                                self.clear_coin_window()
                                coin_list = (Machine().make_change(
                                    abs(self.__price)))
                                self.input_coinn.set("wydaje reszte: " +
                                                     str(coin_list))
                                self.__exit = True
                                self.__ok_clicked = False
                                self.__master.after(1000,
                                                    lambda: self.clear_all())

                            except exceptions.NoMoneyToMakeChange:
                                print("tylko odliczona kwota")
                                self.__thrown_exception = True
                                self.clear_all()
                                messagebox.showerror(
                                    "Error",
                                    "Prosze wprowadzic odliczona kwote.")

                        elif self.__price == 0:
                            time.sleep(1.00)
                            self.input_coinn.set("prosze odebrac pordukt")
                            self.__exit = True
                            self.__ok_clicked = False
                            self.__master.after(1000, lambda: self.clear_all())

                    else:
                        if self.__price > 0:
                            self.input_coinn.set(
                                "brakuje : " +
                                str(abs(round(self.__price, 2))))
                        elif self.__price == 0:
                            time.sleep(1.00)
                            self.input_coinn.set("prosze odebrac pordukt")
                            self.__exit = True
                            self.__ok_clicked = False
                            self.__master.after(1000, lambda: self.clear_all())
                        elif self.__price < 0:
                            self.__ok_clicked = False
                            self.input_coinn.set("tylko odliczona kwota")
                            self.__master.after(1000, lambda: self.clear_all())
                            raise exceptions.NoMoneyToMakeChange
        else:
            self.input_coinn.set("zatwierdz operacje")