def test_create_client_existing_client(self): token, _ = Token.objects.get_or_create(client=make_client(self.user)) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') resp = self.client.post(reverse(ClientCreateView.view_name), data={ 'first_name': 'VASYA', 'gender': Gender.MALE, 'date_of_birth': utils.get_date(-100), 'tip': 10, 'address': { 'location': { 'lat': 100, 'lon': 100, }, 'city': 'kazan', 'street_name': 'latstr', 'building': '4', 'floor': 2, 'apt_number': 79, 'entrance': 6, 'has_intercom': True } }, format='json') self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
def test_create_client_existing_master(self): make_master('mas', 10, user=self.user) client = make_client(user=self.user, activated=False) token, _ = Token.objects.get_or_create(client=client) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') resp = self.client.post(reverse(ClientCreateView.view_name), data={ 'first_name': 'VASYA', 'gender': Gender.MALE, 'date_of_birth': utils.get_date(-100), 'tip': 10, 'address': { 'location': { 'lat': 100, 'lon': 100, }, 'city': 'kazan', 'street_name': 'latstr', 'building': '4', 'floor': 2, 'apt_number': 79, 'entrance': 6, 'has_intercom': True } }, format='json') self.assertEqual(resp.status_code, status.HTTP_201_CREATED) # dat user self.user = PhoneAuthUser.objects.get(phone='777') self.assertIsNotNone(self.user.client) self.assertEqual(self.user.client.first_name, 'VASYA') self.assertIsNotNone(self.user.master) self.assertEqual(self.user.master.first_name, 'mas')
def test_create_client(self): token, _ = Token.objects.get_or_create(client=make_client( activated=False)) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') resp = self.client.post(reverse(ClientCreateView.view_name), data={ 'first_name': 'VASYA', 'gender': Gender.MALE, 'date_of_birth': utils.get_date(-100), 'tip': 10, 'address': { 'location': { 'lat': 100, 'lon': 100, }, 'city': 'kazan', 'street_name': 'latstr', 'building': '4', 'floor': 2, 'apt_number': 79, 'entrance': 6, 'has_intercom': True } }, format='json') self.assertEqual(resp.status_code, status.HTTP_201_CREATED) new_client_object = Client.objects.get(first_name='VASYA') self.assertEqual(new_client_object.first_name, 'VASYA') self.assertEqual(new_client_object.gender, Gender.MALE) self.assertEqual(new_client_object.tip, 10) self.assertEqual(len(new_client_object.addresses.all()), 1) self.assertEqual(new_client_object.home_address.city, 'kazan')
def test_master_search_only_service(self, _calculate_eta): master = Master.objects.get(first_name='VASYA') service = master.services.all()[0] # manually creating an order make_order(client=make_client(), master=master, service=service, order_date=timezone.now() + delta(days=1), order_time=datetime.time(hour=10, minute=30)) # assume all slots are reachable _calculate_eta.return_value = 10 url = reverse(MasterSearchView.view_name) resp = self.client.get(f"{url}?service={service.id}&coordinates=10,20") self.assertEqual(resp.status_code, status.HTTP_200_OK) # no favorites in this test favorites = resp.data['favorites'] self.assertEqual(len(favorites), 0) others = resp.data['others'] # both do at least one service in the following week self.assertEqual(len(others), 1) # two days with slots day_one_slots = others[0]['available_slots'] self.assertEqual(len(day_one_slots), 2)
def setUp(self): self.user = PhoneAuthUser.objects.create( phone=random.randint(1000, 10000)) self.client_object = make_client(self.user) token, _ = Token.objects.get_or_create(client=self.client_object) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}')
def setUp(self): make_everything() self.user = PhoneAuthUser.objects.create(phone='777') self.client_object = make_client(self.user) token, _ = Token.objects.get_or_create(client=self.client_object) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}')
def setUp(self): # making an auth token vasya = make_master("VASYA", 11.0, about='a terrible master') petya = make_master("PETYA", 12.0) hands = make_category("Маникюр") for service in hands.services.all(): vasya.services.add(service) vasya.save() for service in hands.services.all(): petya.services.add(service) petya.save() # VASYA works on 0,+1, does manicure, got three slots schedule = Schedule.objects.create(master=vasya, date=timezone.now()) schedule.save() TimeSlot.objects.create(time=Time.objects.create(hour=10, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=00), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=12, minute=00), taken=False, schedule=schedule) # PETYA works on 0th schedule = Schedule.objects.create(master=petya, date=timezone.now()) schedule.save() TimeSlot.objects.create(time=Time.objects.create(hour=10, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=00), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=12, minute=30), taken=False, schedule=schedule) self.user = PhoneAuthUser.objects.create(phone='777') self.client_object = make_client(self.user) self.master_object = vasya token, _ = Token.objects.get_or_create(master=self.master_object) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}')
def test_upload_not_master(self): client_object = make_client() token, _ = Token.objects.get_or_create(client=client_object) self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') resp = self.client.patch( reverse(MasterAvatarUpdateView.view_name, args=[self.master_object.id]), data={'image': utils.make_in_memory_image('avatar')}) self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
def test_upload_not_master(self): client = make_client() token, _ = Token.objects.get_or_create(client=client) self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') resp = self.client.post(reverse(AddPortfolioItemsView.view_name, args=[self.master_object.id]), data={'images': [utils.make_in_memory_image( 'avatar')]}, format='multipart') self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
def setUp(self): make_everything() self.master_object = Master.objects.get(first_name='VASYA') self.client_object = make_client() self.order, _ = make_order(self.client_object, self.master_object.services.all()[0], self.master_object, order_date=timezone.now() + delta(days=1), order_time='11:30') self.user = self.client_object.user token, _ = Token.objects.get_or_create(client=self.client_object) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}')
def test_logout_ok(self): token, _ = Token.objects.get_or_create(client=make_client()) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') # first time ok response = self.client.post(reverse(LogoutView.view_name)) self.assertEqual(response.status_code, status.HTTP_200_OK) # second time gives unauthorized response = self.client.post(reverse(LogoutView.view_name)) self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_served_once(self): master = Master.objects.get(first_name='VASYA') service = master.services.all()[0] # manually creating an order order_client = make_client() # manually creating an order make_order(client=order_client, master=master, service=service, order_date=timezone.now() + delta(days=1), order_time=datetime.time(hour=10, minute=30)) self.assertEqual(master.times_served(order_client), 1)
def test_create_master_existing_account(self): old_client = make_client() token, _ = Token.objects.get_or_create(client=old_client) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') resp = self.client.post(reverse(MasterListCreateView.view_name), data={ 'first_name': 'SUPER_MASTER', 'gender': Gender.MALE, 'date_of_birth': utils.get_date(-100), 'email': '*****@*****.**', 'services': [service.id for service in Service.objects.all()] }, format='json') self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
def test_cancel_someone_elses_order(self): master = Master.objects.get(first_name='VASYA') service = master.services.all()[0] # manually creating an order order_1, _ = make_order(client=self.client_object, master=master, service=service, order_date=utils.get_date(1), order_time=datetime.time(hour=11, minute=00)) token, _ = Token.objects.get_or_create(client=make_client()) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') resp = self.client.delete( reverse(OrderCancelView.view_name, args=[order_1.id])) self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
def test_create_client_partial(self): token, _ = Token.objects.get_or_create(client=make_client( activated=False)) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION=f'Token {token.key}') resp = self.client.post(reverse(ClientCreateView.view_name), data={ 'first_name': 'VASYA', 'gender': Gender.MALE, 'date_of_birth': utils.get_date(-100), }, format='json') self.assertEqual(resp.status_code, status.HTTP_201_CREATED) new_client_object = Client.objects.get(first_name='VASYA') self.assertEqual(new_client_object.first_name, 'VASYA') self.assertEqual(new_client_object.gender, Gender.MALE) self.assertEqual(len(new_client_object.addresses.all()), 0)
def test_cant_reach(self, _calculate_eta): slot = TimeSlot.objects.create( time=Time.objects.create(hour=10, minute=30), taken=True, schedule=self.schedule) order = Order.objects.create(client=make_client(), date=timezone.now(), time=timezone.now().time()) slot.order_item = OrderItem.objects.create( service=self.vasya.services.first(), master=self.vasya, order=order, locked=False) slot.save() TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=00), taken=False, schedule=self.schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=30), taken=False, schedule=self.schedule) TimeSlot.objects.create(time=Time.objects.create(hour=12, minute=00), taken=False, schedule=self.schedule) location = Location.objects.create(lat=10, lon=120) _calculate_eta.return_value = 10000 self.assertFalse(gmaps_utils.can_reach(self.schedule, location, datetime.time(hour=11, minute=00)))
def test_gmaps_api_unavailable(self, _calculate_eta): slot = TimeSlot.objects.create( time=Time.objects.create(hour=10, minute=30), taken=True, schedule=self.schedule) order = Order.objects.create(client=make_client(), date=timezone.now(), time=timezone.now().time()) slot.order_item = OrderItem.objects.create( service=self.vasya.services.first(), master=self.vasya, order=order, locked=False) slot.save() TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=00), taken=False, schedule=self.schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=30), taken=False, schedule=self.schedule) TimeSlot.objects.create(time=Time.objects.create(hour=12, minute=00), taken=False, schedule=self.schedule) location = Location.objects.create(lat=10, lon=120) _calculate_eta.side_effect = ApplicationError('HEY') with self.assertRaises(ApplicationError): gmaps_utils.can_reach(self.schedule, location, datetime.time(hour=11, minute=00))
def _make_everything(): # making an auth token vasya = make_master("VASYA", 11.0, about='a terrible master') petya = make_master("PETYA", 12.0) hands = make_category("Маникюр") feet = make_category("Педикюр") make_display_item(hands) make_display_item(feet) make_display_item(hands, feet, name='4hands', special=True) for service in hands.services.all(): vasya.services.add(service) vasya.save() token, _ = AppToken.objects.get_or_create(master=vasya, key='master_token') for service in feet.services.all(): petya.services.add(service) petya.save() # VASYA works on +1,+2,+3 does manicure, got three slots schedule = Schedule.objects.create(master=vasya, date=utils.get_date(1)) schedule.save() TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=00), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=30), taken=False, schedule=schedule) schedule = Schedule.objects.create(master=vasya, date=utils.get_date(2)) schedule.save() TimeSlot.objects.create(time=Time.objects.create(hour=10, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=00), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=12, minute=00), taken=False, schedule=schedule) schedule = Schedule.objects.create(master=vasya, date=utils.get_date(3)) schedule.save() TimeSlot.objects.create(time=Time.objects.create(hour=12, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=13, minute=00), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=13, minute=30), taken=False, schedule=schedule) # PETYA works on +2th, +3th does pedicure, got all slots on +2, none on +3 schedule = Schedule.objects.create(master=petya, date=utils.get_date(2)) schedule.save() TimeSlot.objects.create(time=Time.objects.create(hour=10, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=00), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=11, minute=30), taken=False, schedule=schedule) TimeSlot.objects.create(time=Time.objects.create(hour=12, minute=30), taken=False, schedule=schedule) schedule = Schedule.objects.create(master=petya, date=utils.get_date(3)) schedule.save() client = make_client(first_name='client') client2 = make_client(first_name='client2') client3 = make_client(first_name='john doe') token, _ = AppToken.objects.get_or_create(client=client, key='client_token') order, _ = make_order(client=client, service=hands.services.all()[0], order_date=utils.get_date(2), master=vasya, order_time='10:30') order, _ = make_order(client=client2, service=hands.services.all()[1], order_date=utils.get_date(2), master=vasya, order_time='11:30') # still got 2 slots on the first day order, _ = make_order(client=client3, service=hands.services.all()[0], master=vasya, order_time='11:00', order_date=utils.get_date(1), status=OrderStatus.DONE) order.start() order.complete() order.save()