def test_list_vendor_ratings_endpoint(self):
        '''Test that users with the right permission can view list of vendor ratings'''

        role = RoleFactory.create(name='admin')
        user_id = BaseTestCase.user_id()
        vendor_id = VendorFactory.create().id
        permission = PermissionFactory.create(keyword='view_ratings',
                                              role_id=role.id)
        user_role = UserRoleFactory.create(user_id=user_id, role_id=role.id)

        for i in range(5):
            vendor_rating = VendorRating(vendor_id=vendor_id,
                                         user_id=user_id,
                                         comment=f'comment-{i}',
                                         rating=f'{i}',
                                         channel='slack')
            vendor_rating.save()

        response = self.client().get(
            self.make_url(f'/ratings/vendor/{vendor_id}'),
            headers=self.headers())
        response_json = self.decode_from_json_string(
            response.data.decode('utf-8'))

        payload = response_json['payload']

        self.assert200(response)
        self.assertEqual(len(payload['ratings']), 5)
        self.assertJSONKeysPresent(payload['ratings'][0], 'vendorId', 'userId',
                                   'id', 'comment', 'rating', 'channel')
Example #2
0
def test_order_allocations(app):
    org = OrganizationFactory.create()
    u1 = UserFactory.create(organization=org)
    u2 = UserFactory.create(organization=org)
    u3 = UserFactory.create(organization=org)
    vendor = VendorFactory.create()
    order = Order(
        ordered_by=u1,
        vendor=vendor,
        for_date=date.today(),
        placed_at=datetime.now(),
    )
    db.session.add(order)
    db.session.commit()
    assert order.total_amount == Decimal("0.00")
    oc1 = OrderContribution(order=order, user=u1, amount=Decimal("10.80"))
    db.session.add(oc1)
    db.session.commit()
    assert order.total_amount == Decimal("10.80")
    oc2 = OrderContribution(order=order, user=u2, amount=Decimal("2.50"))
    db.session.add(oc2)
    db.session.commit()
    assert order.total_amount == Decimal("13.30")
    oc3 = OrderContribution(order=order, user=u3, amount=Decimal("4.75"))
    db.session.add(oc3)
    db.session.commit()
    assert order.total_amount == Decimal("18.05")
    def test_create_vendor_rating_endpoint(self):
        rating = VendorRatingFactory.build()
        vendor_id = VendorFactory.create().id
        engagement_id = VendorEngagementFactory.create().id
        data = {
            'vendorId': vendor_id,
            'engagementId': engagement_id,
            'user_id': rating.user_id,
            'rating': rating.rating,
            'comment': rating.comment,
            'channel': rating.channel
        }
        response = self.client().post(self.make_url('/ratings/'),
                                      data=self.encode_to_json_string(data),
                                      headers=self.headers())

        response_json = self.decode_from_json_string(
            response.data.decode('utf-8'))
        payload = response_json['payload']

        self.assertEqual(response.status_code, 201)
        self.assertJSONKeyPresent(response_json, 'payload')
        self.assertEqual(payload['rating']['vendorId'], vendor_id)
        self.assertEqual(payload['rating']['userId'], rating.user_id)
        self.assertEqual(payload['rating']['rating'], rating.rating)
        self.assertEqual(payload['rating']['comment'], rating.comment)
        self.assertEqual(payload['rating']['channel'], rating.channel)
Example #4
0
    def test_create_vendor_rating_endpoint_invalid_token(self):
        rating = VendorRatingFactory.build()
        order_id = OrderFactory.create().id
        vendor_id = VendorFactory.create().id
        engagement_id = VendorEngagementFactory.create().id
        main_meal_id = MealItemFactory.create().id
        data = {
            'mainMealId': main_meal_id,
            'vendorId': vendor_id,
            'engagementId': engagement_id,
            'serviceDate': datetime.strftime(rating.service_date, '%Y-%m-%d'),
            'ratingType': rating.rating_type,
            'orderId': order_id,
            'user_id': rating.user_id,
            'rating': rating.rating,
            'comment': rating.comment,
            'channel': rating.channel
        }
        response = self.client().post(
            self.make_url('/ratings/order/'),
            data=self.encode_to_json_string(data),
            headers={
                'Content-Type': 'application/json',
                'X-Location': '1',
                'Authorization': 'Bearer vnvhnv.hhbhjvjvcbcgff.cggnncbnnf'
            })

        response_json = self.decode_from_json_string(
            response.data.decode('utf-8'))

        self.assertEqual(response.status_code, 400)
        self.assertEqual(response_json['msg'], 'Error Decoding')
Example #5
0
    def test_update_vendors_endpoint(self):

        vendor = VendorFactory.create()
        data = {
            'name': 'Jays Place',
            'address': '123 Awesome Ave',
            'tel': '10101010101',
            'isActive': True,
            'contactPerson': 'Joseph Cobhams'
        }
        response = self.client().put(self.make_url('/vendors/{}'.format(
            vendor.id)),
                                     data=self.encode_to_json_string(data),
                                     headers=self.headers())
        response_json = self.decode_from_json_string(
            response.data.decode('utf-8'))
        payload = response_json['payload']

        self.assert200(response)
        self.assertEqual(payload['vendor']['name'], data['name'])
        self.assertEqual(payload['vendor']['address'], data['address'])
        self.assertEqual(payload['vendor']['tel'], data['tel'])
        self.assertEqual(payload['vendor']['contactPerson'],
                         data['contactPerson'])
        '''Test invalid update request'''
        # User arbitrary value of 100 as the Vendor ID
        response = self.client().put(self.make_url('/vendors/100'),
                                     data=self.encode_to_json_string(data),
                                     headers=self.headers())
        self.assert400(response)
Example #6
0
    def test_create_order_rating_endpoint(self):
        rating = VendorRatingFactory.build()
        order_id = OrderFactory.create().id
        vendor_id = VendorFactory.create().id
        engagement_id = VendorEngagementFactory.create().id
        main_meal_id = MealItemFactory.create().id
        data = {
            'mainMealId': main_meal_id,
            'vendorId': vendor_id,
            'engagementId': engagement_id,
            'serviceDate': datetime.strftime(rating.service_date, '%Y-%m-%d'),
            'ratingType': rating.rating_type,
            'orderId': order_id,
            'user_id': rating.user_id,
            'rating': rating.rating,
            'comment': rating.comment,
            'channel': rating.channel
        }
        response = self.client().post(self.make_url('/ratings/order/'),
                                      data=self.encode_to_json_string(data),
                                      headers=self.headers())

        response_json = self.decode_from_json_string(
            response.data.decode('utf-8'))

        payload = response_json['payload']

        self.assertEqual(response.status_code, 201)
        self.assertJSONKeyPresent(response_json, 'payload')
        self.assertEqual(payload['rating']['userId'], rating.user_id)
        self.assertEqual(payload['rating']['rating'], rating.rating)
        self.assertEqual(payload['rating']['comment'], rating.comment)
        self.assertEqual(payload['rating']['channel'], rating.channel)
Example #7
0
    def test_create_vendor_rating_endpoint_no_token(self):
        rating = VendorRatingFactory.build()
        order_id = OrderFactory.create().id
        vendor_id = VendorFactory.create().id
        engagement_id = VendorEngagementFactory.create().id
        main_meal_id = MealItemFactory.create().id
        data = {
            'mainMealId': main_meal_id,
            'vendorId': vendor_id,
            'engagementId': engagement_id,
            'serviceDate': datetime.strftime(rating.service_date, '%Y-%m-%d'),
            'ratingType': rating.rating_type,
            'orderId': order_id,
            'user_id': rating.user_id,
            'rating': rating.rating,
            'comment': rating.comment,
            'channel': rating.channel
        }
        response = self.client().post(self.make_url('/ratings/order/'),
                                      data=self.encode_to_json_string(data),
                                      headers=self.headers_without_token())

        response_json = self.decode_from_json_string(
            response.data.decode('utf-8'))

        self.assertEqual(response.status_code, 400)
        self.assertEqual(response_json['msg'],
                         'Authorization Header is Expected')
Example #8
0
def test_order_allocations(app):
    org = OrganizationFactory.create()
    u1 = UserFactory.create(organization=org)
    u2 = UserFactory.create(organization=org)
    u3 = UserFactory.create(organization=org)
    vendor = VendorFactory.create()
    order = Order(
        ordered_by=u1, vendor=vendor,
        for_date=date.today(), placed_at=datetime.now(),
    )
    db.session.add(order)
    db.session.commit()
    assert order.total_amount == Decimal("0.00")
    oc1 = OrderContribution(order=order, user=u1, amount=Decimal("10.80"))
    db.session.add(oc1)
    db.session.commit()
    assert order.total_amount == Decimal("10.80")
    oc2 = OrderContribution(order=order, user=u2, amount=Decimal("2.50"))
    db.session.add(oc2)
    db.session.commit()
    assert order.total_amount == Decimal("13.30")
    oc3 = OrderContribution(order=order, user=u3, amount=Decimal("4.75"))
    db.session.add(oc3)
    db.session.commit()
    assert order.total_amount == Decimal("18.05")
	def test_un_suspend_vendor(self):
		vendor = VendorFactory.create(is_active=False)

		response = self.client().put(self.make_url(f'/vendors/un_suspend/{vendor.id}'), headers=self.headers())
		response_json = self.decode_from_json_string(response.data.decode('utf-8'))
		payload = response_json['payload']

		self.assert200(response)
		self.assertEqual(payload['vendor']['isActive'], True)
    def test_list_engagements_by_vendor_endpoint(self):
        vendor = VendorFactory.create()
        VendorEngagementFactory.create(vendor=vendor)

        response = self.client().get(self.make_url(f'/engagements/vendor/{vendor.id}'), headers=self.headers())
        response_json = self.decode_from_json_string(response.data.decode('utf-8'))

        self.assert200(response)
        self.assertEqual(response_json['msg'], 'OK')
        self.assertEqual(response_json['payload']['engagements'][0]['vendor']['id'], vendor.id)
	def test_delete_vendor_endpoint_with_wrong_vendor_id(self):
		vendor = VendorFactory.create()

		role = RoleFactory.create(name='admin')
		user_id = BaseTestCase.user_id()
		permission = PermissionFactory.create(keyword='delete_vendor', role_id=role.id)
		user_role = UserRoleFactory.create(user_id=user_id, role_id=role.id)

		response = self.client().delete(self.make_url(f'/vendors/-576A'), headers=self.headers())

		self.assert404(response)
Example #12
0
    def test_rating_today_meal_fails(self):
        vendor = VendorFactory.create()

        engagement = VendorEngagementFactory.create(vendor=vendor)
        engagement_rating = VendorRatingFactory.build(engagement_id=engagement.id)

        rating_data = {'rating': engagement_rating.rating, 'engagementId': engagement_rating.engagement_id,
                       'serviceDate': datetime.strftime(datetime.now().date(), '%Y-%m-%d'), 'mainMealId': MealItemFactory.create().id}

        response = self.client().post(self.make_url(f'/ratings/order/'), data=self.encode_to_json_string(rating_data),
                                      headers=self.headers())

        self.assertEqual(response.status_code, 400)
Example #13
0
    def test_list_rating_endpoint(self):
        vendor = VendorFactory.create()
        engagement = VendorEngagementFactory.create(vendor=vendor)
        rating = VendorRatingFactory.create(engagement=engagement, vendor=vendor)
        create_user_role('view_ratings')
        now = datetime.now()

        response = self.client().get(self.make_url(f'/ratings/{now.strftime("%Y-%m-%d")}'),
                                     headers=self.headers())

        response_json = self.decode_from_json_string(response.data.decode('utf-8'))
        self.assert404(response)
        self.assertEqual(response_json['msg'], 'No ratings for this date')
	def test_delete_vendor_endpoint_without_right_permission(self):
		vendor = VendorFactory.create()

		role = RoleFactory.create(name='admin')
		user_id = BaseTestCase.user_id()
		permission = PermissionFactory.create(keyword='delete_vendor', role_id=100)
		user_role = UserRoleFactory.create(user_id=user_id, role_id=role.id)

		response = self.client().delete(self.make_url(f'/vendors/{vendor.id}'), headers=self.headers())
		response_json = self.decode_from_json_string(response.data.decode('utf-8'))

		self.assert400(response)
		self.assertEqual(response_json['msg'], 'Access Error - No Permission Granted')
Example #15
0
    def test_create_vendor_rating_endpoint(self):
        vendor = VendorFactory.create()

        engagement = VendorEngagementFactory.create(vendor=vendor)
        engagement_rating = VendorRatingFactory.build(engagement_id=engagement.id)

        rating_data = {'rating': engagement_rating.rating, 'engagementId': engagement_rating.engagement_id,
                       'serviceDate': engagement_rating.service_date.strftime('%Y-%m-%d')}

        response = self.client().post(self.make_url(f'/ratings/'), data=self.encode_to_json_string(rating_data),
                                      headers=self.headers())
        response_json = self.decode_from_json_string(response.data.decode('utf-8'))

        self.assertEqual(response.status_code, 201)
        self.assertEqual(response_json['msg'], 'Rating created')
        self.assertEqual(response_json['payload']['rating']['id'], 1)
	def test_delete_vendor_with_associated_engagement(self):
		current_date = datetime.datetime.now().date()
		vendor = VendorFactory.create()
		vendor_engagement_repo = VendorEngagementRepo()
		vendor_engagement = vendor_engagement_repo.new_vendor_engagement(vendor_id=vendor.id, start_date=current_date, location_id=self.headers()['X-Location'])

		role = RoleFactory.create(name='admin')
		user_id = BaseTestCase.user_id()
		permission = PermissionFactory.create(keyword='delete_vendor', role_id=role.id)
		user_role = UserRoleFactory.create(user_id=user_id, role_id=role.id)

		response = self.client().delete(self.make_url(f'/vendors/{vendor.id}'), headers=self.headers())
		response_json = self.decode_from_json_string(response.data.decode('utf-8'))

		self.assert400(response)
		self.assertEqual(response_json['msg'], 'Vendor cannot be deleted because it has a child object')
    def test_immediate_past_engagement_no_past_engagement(self):

        location = LocationFactory()
        location.save()
        vendor = VendorFactory.create(location=location)
        vendor.save()
        engagement1 = VendorEngagementFactory.create(vendor_id=vendor.id, end_date=datetime.now()+timedelta(10), location=location)
        engagement2 = VendorEngagementFactory.create(vendor_id=vendor.id, end_date=datetime.now()+timedelta(14), location=location)
        engagement1.save()
        engagement2.save()

        response = self.client().get(self.make_url(f'/engagements/past/{location.id}'), headers=self.headers())
        response_json = self.decode_from_json_string(response.data.decode('utf-8'))

        self.assert404(response)
        self.assertEqual(response_json['msg'], 'No past engagement for this location')
Example #18
0
    def test_delete_vendor_endpoint_with_right_permission(self):
        vendor = VendorFactory.create()

        role = RoleFactory.create(name='admin')
        user_id = BaseTestCase.user_id()
        permission = PermissionFactory.create(keyword='delete_vendor',
                                              role=role)
        user_role = UserRoleFactory.create(user_id=user_id, role=role)

        response = self.client().delete(self.make_url(f'/vendors/{vendor.id}'),
                                        headers=self.headers())
        response_json = self.decode_from_json_string(
            response.data.decode('utf-8'))
        payload = response_json['payload']

        self.assert200(response)
        self.assertEqual(payload['status'], 'success')
        self.assertEqual(response_json['msg'], 'Vendor deleted')
	def test_get_specific_vendor_enpoint(self):
		vendor = VendorFactory.create()
		response = self.client().get(self.make_url('/vendors/{}'.format(vendor.id)), headers=self.headers())
		response_json = self.decode_from_json_string(response.data.decode('utf-8'))
		payload = response_json['payload']

		self.assert200(response)
		self.assertJSONKeyPresent(payload, 'vendor')
		self.assertJSONKeysPresent(payload['vendor'], 'name', 'tel', 'id', 'address', 'contactPerson', 'timestamps')
		self.assertEqual(payload['vendor']['id'], vendor.id)
		self.assertEqual(payload['vendor']['name'], vendor.name)
		self.assertEqual(payload['vendor']['address'], vendor.address)
		self.assertEqual(payload['vendor']['tel'], vendor.tel)
		

		'''Test invalid update request'''
		# User arbitrary value of 100 as the Vendor ID
		response = self.client().get(self.make_url('/vendors/100'), headers=self.headers())
		self.assert400(response)
    def test_all_vendor_comparison(self):
        vendor = VendorFactory.create()
        engagement = VendorEngagementFactory.create(vendor_id=vendor.id)
        menu = MenuFactory.create(vendor_engagement_id=engagement.id)
        OrderFactory.create(menu_id=menu.id)
        OrderFactory.create(menu_id=menu.id - 1)

        recent_date = datetime.datetime.now().date() + datetime.timedelta(7)

        VendorRatingFactory.create_batch(3, service_date=recent_date)
        response = self.client().get(
            self.make_url('/reports/?all_vendor_comparison=true'),
            headers=self.headers())
        response_json = self.decode_from_json_string(
            response.data.decode('utf-8'))
        payload = response_json['payload']

        self.assertEqual(response.status_code, 200)
        self.assertJSONKeyPresent(response_json, 'payload')
        self.assertEqual(type(payload), list)
Example #21
0
def test_create(client):
    user = UserFactory.create()
    vendor = VendorFactory.create()
    db.session.commit()
    response = client.post('/api/orders', data={
        "contributed_by": user.id,
        "contributed_amount": "8.50",
        "ordered_by_id": user.id,
        "vendor_id": vendor.id,
    })
    assert response.status_code == 201
    assert response.headers["Access-Control-Allow-Origin"] == "*"
    assert "Location" in response.headers
    obj = json.loads(response.get_data(as_text=True))
    assert "id" in obj
    url = response.headers["Location"]
    path = urlparse(url).path
    resp2 = client.get(path)
    assert resp2.status_code == 200
    created = json.loads(resp2.get_data(as_text=True))
    assert created["contributions"][0]["amount"] == "8.50"
def test_create(client):
    user = UserFactory.create()
    vendor = VendorFactory.create()
    db.session.commit()
    response = client.post('/api/orders',
                           data={
                               "contributed_by": user.id,
                               "contributed_amount": "8.50",
                               "ordered_by_id": user.id,
                               "vendor_id": vendor.id,
                           })
    assert response.status_code == 201
    assert response.headers["Access-Control-Allow-Origin"] == "*"
    assert "Location" in response.headers
    obj = json.loads(response.get_data(as_text=True))
    assert "id" in obj
    url = response.headers["Location"]
    path = urlparse(url).path
    resp2 = client.get(path)
    assert resp2.status_code == 200
    created = json.loads(resp2.get_data(as_text=True))
    assert created["contributions"][0]["amount"] == "8.50"
Example #23
0
def vendors(app):
    v1 = VendorFactory.create()
    v2 = VendorFactory.create()
    db.session.commit()
    return [v1, v2]
Example #24
0
def vendors(app):
    v1 = VendorFactory.create()
    v2 = VendorFactory.create()
    db.session.commit()
    return [v1, v2]