from otree.api import Currency as c, currency_range from . import pages from ._builtin import Bot from .models import Constants import test_cases as tc import random as r # FOR ALPHA/BETA TESTING class PlayerBot(Bot): """"This class represents a virtual player that will input the values that each page requires and that allows to test if there are errors in a specific page or field. -Yield statements will change the value of the fields -Assert statements check if the field values have a specific value or not There are two main modes for the bots *alpha: They check if the game runs with values that belong to the boundaries of each variable. It has 4 submodes **inside: checks for errors using inside the boundaries **boundaries: checks for errors using the boundary values **outside: checks for errors using values outside the boundaries **types: checks if the values that has been inputted are the same type of the respective variables *beta: They check how the game would run in a real environment with a big amount of players. To activate it, run the game with N bots in the 'inside' mode """ def play_round(self): test_mode = 'inside' practice_answers_lender = tc.practice_lender_cases practice_answers_borrower = tc.practice_borrower_cases quiz_answers = tc.quiz_cases[test_mode] """ prac_collateral_offer = models.IntegerField(initial=None) prac_collateral_offer_input = models.IntegerField( verbose_name='Enter a collateral offer.', initial=None) quiz_incorrect_answer = models.StringField(initial=None) prac_loan_offer = models.IntegerField(initial=None) prac_loan_offer_input = models.IntegerField(verbose_name='Enter a loan offer.', initial=None) prac_borrower_money = models.CurrencyField(initial=Constants.initial_points ) prac_lender_money = models.CurrencyField(initial=Constants.initial_points ) prac_lender_dollar_value = models.CharField() prac_borrower_dollar_value = models.CharField() prac_requested_repayment = models.CurrencyField() prac_project_return = models.CurrencyField() prac_recovered_collateral= models.CurrencyField() prac_returned_collateral = models.CurrencyField() prac_loan_package_decision = models.CharField(verbose_name='Do you accept the loan package?', choices=['Yes', 'No'], widget=widgets.RadioSelect ) prac_return = models.IntegerField(initial=None) prac_return_input = models.IntegerField( verbose_name='Enter the amount you would like to return.', initial=None) prac_max_return = models.IntegerField(initial=None) prac_collateral_decision = models.CharField(verbose_name='Do you wish to recover collateral?', choices=['Yes', 'No'], widget=widgets.RadioSelect ) prac_collateral_after_cost = models.IntegerField(initial=None) prac_collateral_seizure_amount = models.IntegerField(initial=None) prac_collateral_seizure_input = models.IntegerField( verbose_name='Enter the amount you would like to recover.', initial=None) """ if test_mode in tc.available_test_modes: yield (pages.NotMobilePlayers) yield (pages.WelcomePage) yield (pages.TaskOverview) yield (pages.RoleAssignment) yield (pages.LoanAgreement) yield (pages.LoanFulfillment) yield (pages.LoanRemediation) yield (pages.TaskRepayment) yield (pages.ScoreSheetOverview) # Values for Practice Game if test_mode == 'inside': if self.player.role() == 'lender': yield (pages.PracLoanOffer, {'prac_loan_offer': tests_for_lender['prac_loan_offer']}) yield (pages.PracCollateralDecision, {'prac_collateral_decision': tests_for_lender['prac_collateral_decision']}) yield (pages.PracCollateralSeizure) yield (pages.PracResults) else: yield (pages.PracCollateralOffer) yield (pages.PracLoanPackageDecision) yield (pages.PracReturnRealization) yield (pages.PracResults) else: if self.player.role() == 'lender': yield (pages.PracLoanOffer) yield (pages.PracCollateralDecision) yield (pages.PracCollateralSeizure) yield (pages.PracResults) else: yield (pages.PracCollateralOffer) yield (pages.PracLoanPackageDecision) yield (pages.PracReturnRealization) yield (pages.PracResults) # Values for Quiz yield (pages.QuizPage) yield (pages.QuizTimeout) yield (pages.QuizPage) yield (pages.QuizTimeout) yield (pages.QuizPage) yield (pages.QuizTimeout) yield (pages.QuizPage) yield (pages.QuizTimeout) yield (pages.QuizPage) yield (pages.QuizTimeout) yield (pages.QuizPage) yield (pages.QuizTimeout) yield (pages.QuizResults) else: print('Testing mode error: An invalid mode has been inputted.')