def test_report(self): 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/'), 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)
def test_report_fails_for_start_date_less_than_endDate(self): 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/?start_date=2019-03-10&end_date=2019-03-12'), headers=self.headers()) response_json = self.decode_from_json_string( response.data.decode('utf-8')) self.assertEqual(response.status_code, 400) self.assertEqual(response_json['msg'], 'Start date must not be less than end date')
def test_get_single_rating(self): '''Test that users with the right permission can see details of a single rating vendor rating''' rating = VendorRatingFactory.create() rating_id = rating.id role = RoleFactory.create(name='Admin') permission = PermissionFactory.create(keyword='view_ratings', role_id=role.id) user_role = UserRoleFactory.create(user_id=rating.user_id, role_id=role.id) response = self.client().get(self.make_url(f'/ratings/{rating_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, 'rating') self.assertJSONKeysPresent(payload['rating'], 'vendorId', 'userId', 'id', 'comment', 'rating', 'channel') self.assertEqual(payload['rating']['id'], rating_id) self.assertEqual(payload['rating']['userId'], rating.user_id) self.assertEqual(payload['rating']['vendorId'], rating.vendor_id) self.assertEqual(payload['rating']['comment'], rating.comment) self.assertEqual(payload['rating']['rating'], rating.rating) '''Search for a non-existing rating returns 400 error''' response = self.client().get(self.make_url('/ratings/100'), headers=self.headers()) self.assert400(response)
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)
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')
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)
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')
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)
def test_get_single_rating_without_permission(self): """Test that users without the right permission cannot see details of a single rating vendor rating""" rating = VendorRatingFactory.create() rating_id = rating.id role = RoleFactory.create(name='Admin') permission = PermissionFactory.create(keyword='view_ratings', role_id=100) user_role = UserRoleFactory.create(user_id=rating.user_id, role_id=role.id) response = self.client().get(self.make_url(f'/ratings/{rating_id}'), headers=self.headers()) self.assert401(response)
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)
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_update_vendor_rating(self): vendor = VendorFactory.build(location_id=self.location.id) new_vendor = self.repo.new_vendor(vendor.name, vendor.address, vendor.tel, vendor.is_active, vendor.contact_person, vendor.location_id) engagement = VendorEngagementFactory(location_id=self.location.id, vendor_id=vendor.id, vendor=vendor) vendor_rating = VendorRatingFactory.build() main_meal_id = MealItemFactory.create().id vendor_rating = VendorRatingFactory.build(vendor_id=vendor.id, engagement_id=engagement.id) self.rating_repo.new_rating( new_vendor.id, vendor_rating.user_id, 4, vendor_rating.service_date, vendor_rating.rating_type, vendor_rating.type_id, vendor_rating.engagement_id, main_meal_id, vendor_rating.channel, vendor_rating.comment) self.repo.update_vendor_average_rating(new_vendor.id) self.assertEqual(new_vendor.average_rating, 4)
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_update_vendor_rating(self): vendor = VendorFactory.build() new_vendor = self.repo.new_vendor(vendor.name, vendor.address, vendor.tel, vendor.is_active, vendor.contact_person, vendor.location_id) vendor_rating = VendorRatingFactory.build() self.rating_repo.new_rating( new_vendor.id, vendor_rating.user_id, 4, vendor_rating.service_date, vendor_rating.rating_type, vendor_rating.type_id, vendor_rating.engagement_id, vendor_rating.channel, vendor_rating.comment) self.repo.update_vendor_average_rating(new_vendor.id) self.assertEqual(new_vendor.average_rating, 4)
def test_update_vendor_rating_endpoint(self): rating = VendorRatingFactory.create() data = {'comment': 'New comments'} response = self.client().put(self.make_url(f'/ratings/{rating.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['rating']['id'], rating.id) self.assertEqual(payload['rating']['userId'], rating.user_id) self.assertEqual(payload['rating']['vendorId'], rating.vendor_id) self.assertEqual(payload['rating']['comment'], rating.comment) self.assertEqual(payload['rating']['rating'], rating.rating) """Updating a non-existent rating should return 400 error""" response = self.client().patch(self.make_url(f'/ratings/777777777'), data=self.encode_to_json_string(data), headers=self.headers()) self.assert404(response)