def test_update_subscription_apply_now(self, send_mail_m, boto_m, user, proposed_to_user_order, proposed_to_user_product_offer, proposed_to_user_product_offer_2, proposed_to_user_offer_item, graphql_client): patch_boto_for_save_user_mutation(boto_m=boto_m) old_order_id = proposed_to_user_order.id old_product_offer_id_1 = proposed_to_user_product_offer.id old_product_offer_id_2 = proposed_to_user_product_offer_2.id old_offer_item_id = proposed_to_user_offer_item.id query = ''' mutation saveUser($input: SaveUserInput!) { saveUser(input: $input) { clientMutationId user { userSubscription { type state } } } }''' variables = { 'input': { 'userSubscription': { 'type': 'red', 'applyForCurrentOrder': True, }, }, } # Test graphql_client.post(query, variables) # Check old order and offers are deleted assert db.session.query(Order).filter_by( id=old_order_id).first() is None assert db.session.query(ProductOffer).filter_by( id=old_product_offer_id_1).first() is None assert db.session.query(ProductOffer).filter_by( id=old_product_offer_id_2).first() is None assert db.session.query(OfferItem).filter_by( id=old_offer_item_id).first() is None orders = db.session.query(Order).all() assert len(orders) == 1 new_order = orders[0] assert new_order.state == STARTED_STATE
def test_save_device_token_duplicate(self, send_mail_m, boto_m): boto_client_m = patch_boto_for_save_user_mutation(boto_m=boto_m) assert not User.query.filter_by(cognito_sub=self._cognito_sub).count() inp = self._save_user_input_dict.copy() inp['input']['deviceToken'] = 'device_token' self._call_save_user_mutation(inp) boto_client_m.get_user.assert_called_once_with( AccessToken=self._valid_jwt) # Test self._call_save_user_mutation( {'input': { 'deviceToken': 'device_token' }}) self._call_save_user_mutation( {'input': { 'deviceToken': 'device_token2' }}) # Check tokens = db.session.query(DeviceToken).all() assert [t.token for t in tokens] == ['device_token', 'device_token2'] boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_not_called() boto_client_m.change_password.assert_not_called() boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_once()
def test_update_subscription_apply_for_next_order( self, send_mail_m, boto_m, user, proposed_to_user_order, proposed_to_user_product_offer, proposed_to_user_product_offer_2, proposed_to_user_offer_item, graphql_client): patch_boto_for_save_user_mutation(boto_m=boto_m) old_order_id = proposed_to_user_order.id old_product_offer_id_1 = proposed_to_user_product_offer.id old_product_offer_id_2 = proposed_to_user_product_offer_2.id old_offer_item_id = proposed_to_user_offer_item.id query = ''' mutation saveUser($input: SaveUserInput!) { saveUser(input: $input) { clientMutationId user { userSubscription { type state } } } }''' variables = { 'input': { 'userSubscription': { 'type': 'red', }, }, } # Test graphql_client.post(query, variables) # Check old order and offers are present order = db.session.query(Order).filter_by(id=old_order_id).first() assert order is not None assert db.session.query(ProductOffer).filter_by( id=old_product_offer_id_1).first() is not None assert db.session.query(ProductOffer).filter_by( id=old_product_offer_id_2).first() is not None assert db.session.query(OfferItem).filter_by( id=old_offer_item_id).first() is not None assert order.subscription.type == 'red'
def test_update_user_card(self, send_mail_m, boto_m, domain_card_2, domain_card_3): boto_client_m = patch_boto_for_save_user_mutation( boto_m=boto_m, boto_user_dict={ self._valid_jwt: { 'UserAttributes': { 'email': '*****@*****.**', 'phone_number': '+123456789012', } } }) assert not User.query.filter_by(cognito_sub=self._cognito_sub).count() self._call_save_user_mutation(self._save_user_input_dict) boto_client_m.get_user.assert_called_once_with( AccessToken=self._valid_jwt) update_input_dict = { 'input': { 'userCards': [ { 'domainCardId': graphene.Node.to_global_id('DomainCard', domain_card_2.id), 'preference': 'neutral', }, { 'domainCardId': graphene.Node.to_global_id('DomainCard', domain_card_3.id), 'preference': 'dislike', }, ], }, } self._call_save_user_mutation(update_input_dict) self._save_user_input_dict['input']['userCards'][ 1] = update_input_dict['input']['userCards'][0] self._save_user_input_dict['input']['userCards'][ 2] = update_input_dict['input']['userCards'][1] expected, result = self._produce_expected_and_result( self._save_user_input_dict) assert expected == result boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_not_called() boto_client_m.change_password.assert_not_called() boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_once()
def test_update_with_nulls_1(self, send_mail_m, boto_m): boto_client_m = patch_boto_for_save_user_mutation( boto_m=boto_m, boto_user_dict={ self._valid_jwt: { 'UserAttributes': { 'email': '*****@*****.**', 'phone_number': '+123456789012', } } }) assert not User.query.filter_by(cognito_sub=self._cognito_sub).count() self._call_save_user_mutation(self._save_user_input_dict) boto_client_m.get_user.assert_called_once_with( AccessToken=self._valid_jwt) update_input_dict = { 'input': { 'clientMutationId': None, 'firstName': None, 'lastName': None, 'email': None, 'phone': None, 'oldPassword': None, 'newPassword': None, 'avatar': None, 'userAddress': { 'country': None, 'stateRegion': None, 'city': None, 'street1': None, 'street2': None, 'postcode': None, }, 'userSubscription': { 'type': None, 'bottleQty': None, 'budget': None, }, 'userCards': [], }, } self._call_save_user_mutation(update_input_dict) expected, result = self._produce_expected_and_result( self._save_user_input_dict) assert expected == result boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_not_called() boto_client_m.change_password.assert_not_called() boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_once()
def test_update_user_details(self, send_mail_m, boto_m): # TODO: Refactor all tests of this kind to use User fixture instead of calling 'save user mutation' boto_client_m = patch_boto_for_save_user_mutation(boto_m=boto_m) assert not User.query.filter_by(cognito_sub=self._cognito_sub).count() self._call_save_user_mutation(self._save_user_input_dict) update_input_dict = { 'input': { 'clientMutationId': 'test_mutation_id2', 'firstName': 'John (updated)', 'lastName': 'Doe (updated)', 'email': '*****@*****.**', 'phone': '+111111111111', 'oldPassword': '******', 'newPassword': '******', 'avatar': 'https://test.com/updatedimage.png', }, } self._call_save_user_mutation(update_input_dict) del update_input_dict['input']['oldPassword'] del update_input_dict['input']['newPassword'] self._save_user_input_dict['input'].update(update_input_dict['input']) expected, result = self._produce_expected_and_result( self._save_user_input_dict) assert expected == result boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_called_once_with( UserAttributes=[ { 'Name': 'email', 'Value': '*****@*****.**' }, { 'Name': 'phone_number', 'Value': '+111111111111' }, ], AccessToken=self._valid_jwt) boto_client_m.change_password.assert_called_once_with( PreviousPassword='******', ProposedPassword='******', AccessToken=self._valid_jwt) boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_with(AccessToken=self._valid_jwt) assert boto_client_m.get_user.call_count == 2
def test_update_user_address(self, send_mail_m, boto_m): boto_client_m = patch_boto_for_save_user_mutation( boto_m=boto_m, boto_user_dict={ self._valid_jwt: { 'UserAttributes': { 'email': '*****@*****.**', 'phone_number': '+123456789012', } } }) assert not User.query.filter_by(cognito_sub=self._cognito_sub).count() self._call_save_user_mutation(self._save_user_input_dict) boto_client_m.get_user.assert_called_once_with( AccessToken=self._valid_jwt) update_input_dict = { 'input': { 'userAddress': { 'country': 'Ukraine', 'stateRegion': 'Lviv Region', 'city': "Lviv", 'street1': 'Shevchenka', 'street2': '', 'postcode': '11111', }, }, } self._call_save_user_mutation(update_input_dict) self._save_user_input_dict['input'].update(update_input_dict['input']) expected, result = self._produce_expected_and_result( self._save_user_input_dict) assert expected == result boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_not_called() boto_client_m.change_password.assert_not_called() boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_once()
def test_update_user_subscription(self, send_mail_m, boto_m): boto_client_m = patch_boto_for_save_user_mutation( boto_m=boto_m, boto_user_dict={ self._valid_jwt: { 'UserAttributes': { 'email': '*****@*****.**', 'phone_number': '+123456789012', } } }) assert not User.query.filter_by(cognito_sub=self._cognito_sub).count() self._call_save_user_mutation(self._save_user_input_dict) boto_client_m.get_user.assert_called_once_with( AccessToken=self._valid_jwt) update_input_dict = { 'input': { 'userSubscription': { 'type': 'white', 'bottleQty': 5, 'budget': '50.00', }, }, } self._call_save_user_mutation(update_input_dict) self._save_user_input_dict['input'].update(update_input_dict['input']) expected, result = self._produce_expected_and_result( self._save_user_input_dict) assert expected == result boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_not_called() boto_client_m.change_password.assert_not_called() boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_once()
def test_register_new_user(self, boto_m): boto_client_m = patch_boto_for_save_user_mutation( boto_m=boto_m, boto_user_dict={ self._valid_jwt: { 'UserAttributes': { 'email': '*****@*****.**', 'phone_number': '+123456789012', } } }) assert not User.query.filter_by(cognito_sub=self._cognito_sub).count() result = self._call_save_user_mutation(self._save_user_input_dict) result_client_mutation_id = result['data']['saveUser'][ 'clientMutationId'] input_client_mutation_id = self._save_user_input_dict['input'][ 'clientMutationId'] assert result_client_mutation_id == input_client_mutation_id expected, result = self._produce_expected_and_result( self._save_user_input_dict) assert expected == result # Check wine expert was assigned user = db.session.query(User).filter_by( email=self._save_user_input_dict['input']['email']).first() assert user.wine_expert_id == self._wine_expert_id boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_not_called() boto_client_m.change_password.assert_not_called() boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_once_with( AccessToken=self._valid_jwt)
def test_save_device_token(self, send_mail_m, boto_m): boto_client_m = patch_boto_for_save_user_mutation(boto_m=boto_m) assert not User.query.filter_by(cognito_sub=self._cognito_sub).count() inp = self._save_user_input_dict.copy() inp['input']['deviceToken'] = 'device_token' # Test self._call_save_user_mutation(inp) # Check token = db.session.query(DeviceToken).first() assert token.token == 'device_token' boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_not_called() boto_client_m.change_password.assert_not_called() boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_once_with( AccessToken=self._valid_jwt)
def test_save_subscription_state(self, boto_m, user): boto_client_m = patch_boto_for_save_user_mutation(boto_m=boto_m) user_id = user.id self._call_save_user_mutation(self._save_user_input_dict) boto_client_m.get_user.assert_called_once_with( AccessToken=self._valid_jwt) update_input_dict = { 'input': { 'userSubscription': { 'state': 'suspended', }, }, } result = self._call_save_user_mutation(update_input_dict) assert result['data']['saveUser']['user']['userSubscription'][ 'state'] == 'suspended' updated_user = User.query.get(user_id) assert updated_user.primary_user_subscription.state == SUBSCRIPTION_SUSPENDED_STATE update_input_dict['input']['userSubscription']['state'] = 'active' result = self._call_save_user_mutation(update_input_dict) assert result['data']['saveUser']['user']['userSubscription'][ 'state'] == 'active' updated_user = User.query.get(user_id) assert updated_user.primary_user_subscription.state == SUBSCRIPTION_ACTIVE_STATE boto_client_m.admin_disable_user.assert_not_called() boto_client_m.admin_enable_user.assert_not_called() boto_client_m.admin_update_user_attributes.assert_not_called() boto_client_m.update_user_attributes.assert_called_once() boto_client_m.change_password.assert_not_called() boto_client_m.admin_get_user.assert_not_called() boto_client_m.get_user.assert_called_once()