def test_initiator_should_see_appropriate_credit_trades(self): """ As a fuel supplier, I should see all credit trades where: I'm the initiator, regardless of status I'm the respondent, if the status is "submitted" or greater """ # setup some test data DataCreationUtilities.create_possible_credit_trades( self.users['fs_user_1'].organization, self.users['fs_user_2'].organization) response = self.clients['fs_user_1'].get('/api/credit_trades') self.assertEqual(response.status_code, status.HTTP_200_OK) fs_credit_trades = response.json() for credit_trade in fs_credit_trades: correct_view = False if credit_trade['initiator']['id'] == \ self.users['fs_user_1'].organization.id: correct_view = True elif (credit_trade['respondent']['id'] == self.users['fs_user_1'].organization.id and credit_trade['status']['id'] >= self.statuses['submitted'].id): correct_view = True self.assertTrue(correct_view)
def test_signing_authority_confirmations(self): """Test permissions for signing authority confirmations """ initiator = \ self.users[self.user_map[TestSigningAuthorityConfirmations.UserRelationship.INITIATOR]] respondent = \ self.users[self.user_map[TestSigningAuthorityConfirmations.UserRelationship.RESPONDENT]] trades = DataCreationUtilities.create_possible_credit_trades( initiator.organization, respondent.organization ) expected_results = defaultdict(lambda: False) # key (relationship, status, rescinded?) expected_results[( TestSigningAuthorityConfirmations.UserRelationship.INITIATOR, self.statuses['draft'].status, False )] = True expected_results[( TestSigningAuthorityConfirmations.UserRelationship.INITIATOR, self.statuses['submitted'].status, False )] = True expected_results[( TestSigningAuthorityConfirmations.UserRelationship.RESPONDENT, self.statuses['accepted'].status, False )] = True expected_results[( TestSigningAuthorityConfirmations.UserRelationship.RESPONDENT, self.statuses['submitted'].status, False )] = True for (trade, relationship) in \ product(trades, TestSigningAuthorityConfirmations.UserRelationship): # Sign an array of assertions, like the frontend does with self.subTest( "Testing signing confirmation permissions as array", relationship=relationship, status=trade['status'], rescinded=trade['rescinded'] ): payload = list(map(lambda assertion, trade_id=trade['id']: { 'hasAccepted': True, 'signingAuthorityAssertion': assertion.id, 'creditTrade': trade_id }, SigningAuthorityAssertion.objects.all())) response = self.clients[self.user_map[relationship]].post( '/api/signing_authority_confirmations', content_type='application/json', data=json.dumps(payload) ) valid = status.is_success(response.status_code) self.assertEqual( valid, expected_results[(relationship, trade['status'], trade['rescinded'])] ) # also try one at a time (not a JSON array) with self.subTest( "Testing signing confirmation permissions one at a time", relationship=relationship, status=trade['status'], rescinded=trade['rescinded'] ): assertion_id = SigningAuthorityAssertion.objects.first().id payload = { 'hasAccepted': True, 'signingAuthorityAssertion': assertion_id, 'creditTrade': trade['id'] } response = self.clients[self.user_map[relationship]].post( '/api/signing_authority_confirmations', content_type='application/json', data=json.dumps(payload) ) valid = status.is_success(response.status_code) self.assertEqual( valid, expected_results[(relationship, trade['status'], trade['rescinded'])] )