def est_venenoThrift_inboxUser_WeChat_Sanity(self): actualOrgId = construct.updateOrgId(constant.config['wechat']['orgId']) actualOrgName = construct.updateOrgName(constant.config['wechat']['orgName']) try: details = VenenoHelper.preRequisitesForVenenoWechat(testControlType='skip') campaignMessage.getWeCRMTemplates() subject = { "template_id" : unicodedata.normalize('NFKD', constant.config['templateId']).encode('ascii', 'ignore'), "touser" : "{{wechat_open_id}}", "OriginalId" : constant.config['wechat']['OriginalId'], "Title" : "", "BrandId" : "f", "url" : "http://we.capillarytech-cn.com/web?appid=wxc7bf989decc7e35b&redirect_uri=http://somelink.com/someword?nowAParam=firstParam&second=second.Param&response_type=code&scope=snsapi_base&state=STATE", "TopColor" : "#000000", "data" : {"productType": {"value": "HakeemProduct", "color": "#00000"}, "name": {"value": "Hakeem {{first_name}} Lukka", "color": "#00000"}, "number": {"value": "898767 skdjnjn", "color": "#00000"}, "expDate": {"value": "look down", "color": "#00000"}, "remark": { "value": "Look up", "color": "#00000"}} } cdDetailsBody = { 'campaignId':details['campaignId'], 'communicationType':'WECHAT', 'subject': str(subject), 'body': 'Thrift Created Automation Wechat Body', 'recipientListId':details['groupVersionResult']['TEST']['id'], 'overallRecipientCount':details['groupVersionResult']['TEST']['customer_count'], 'expectedDeliveryCount':details['groupVersionResult']['TEST']['customer_count'], 'groupName':details['groupName'] } communicationDetailObject = VenenoObject.communicationDetail(cdDetailsBody) communicationId = self.connObj.addMessageForRecipients(communicationDetailObject) VenenoDBAssertion(cdDetailsBody['campaignId'], cdDetailsBody['communicationType'], communicationId, cdDetailsBody['overallRecipientCount'], cdDetailsBody['recipientListId'], cdDetailsBody['subject'], testControlType='skip', skippedReasons=['Captured OpenId for user seems to be unsubscribed']).check() except Exception, exp: raise Exception('Wechat Case Failed due to :{}'.format(exp))
def test_veneno_skippedUser_noCouponForUser_ProdSanity(self): try: mergeListresponse, mergeListPayload, campaignId = campaignList.mergeList(campaignId=self.campaignId, numberOfUsers=2) self.listId = mergeListresponse['json']['entity']['listId'] self.groupVersionResult = dbCallsList.getGroupVersionDetailsWithGroupId(mergeListresponse['json']['entity']['listId']) self.bucketId = self.groupVersionResult['TEST']['bucket_id'] self.couponConfigChange({'max_create':1,'max_redeem':1}) time.sleep(70) messagePayloadToUpdate = { 'incentive':{ 'type':'COUPONS', 'voucherSeriesId':self.voucherId }, 'senderDetails':{ 'domainGatewayMapId':constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId':constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults':False, 'cdmaSenderId':constant.config['message_senders']['cdmaSenderId'] }, 'message' : 'This Message is Going to Skip Due to number of Issued coupon is 1 and users are 2 : {{voucher}} {{optout}}' } messageResponse, messagePayload = campaignMessage.createMessage(self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest(self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody(self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId , communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], testControlType='skip', skippedReasons=['max create for series exceeded']).check() authorize.assertUserPresenceInSkippedTable(communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['MAX_COUPON_ISSUAL_PER_SERIES_EXCEEDED'], 'max create for series exceeded') except Exception, exp: Assertion.constructAssertion(False, exp)
def test_veneno_skippedUser_unsubscribed_ProdSanity(self): originalListId = self.listId originalBucketId = self.bucketId originalGroupVersionDetail = self.groupVersionResult try: messagePayloadToUpdate = { 'senderDetails':{ 'domainGatewayMapId':constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId':constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults':False, 'cdmaSenderId':constant.config['message_senders']['cdmaSenderId'] }, 'message' : 'This Message is Going to Skip Due Unsubscribe User : {{optout}}' } cusObj = InTouchAPI(Customer.Add()) mergeListresponse, mergeListPayload, campaignId = campaignList.mergeList({'name': 'IRIS_LIST_' + str(int(time.time() * 100000)), 'recipients':{'dataSource':'CSV', 'schema':'firstName,lastName,mobile', 'data':['TestX,AutomationX,{}'.format(cusObj.params['mobile'])]}}, campaignId=self.campaignId) self.listId = mergeListresponse['json']['entity']['listId'] self.groupVersionResult = dbCallsList.getGroupVersionDetailsWithGroupId(mergeListresponse['json']['entity']['listId']) self.bucketId = self.groupVersionResult['TEST']['bucket_id'] unsubscribeObj = InTouchAPI(Customer.unsubscribe(body={'root':{'subscription':{'mobile':cusObj.params['mobile']}}})) if unsubscribeObj.status_code == 200: messageResponse, messagePayload = campaignMessage.createMessage(self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest(self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody(self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId , communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], testControlType='skip', skippedReasons=['Captured mobile for user seems to be unsubscribed']).check() authorize.assertUserPresenceInSkippedTable(communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['UNSUBSCRIBED'], 'Captured mobile for user seems to be unsubscribed') else : raise Exception('Not Able To Unsubscribe using Intouch Call') except Exception, exp: Assertion.constructAssertion(False, exp)
def test_venenoThrift_skippedUser_CallTask(self): cdDetailsBody = { 'campaignId': self.details['campaignId'], 'communicationType': 'CALL_TASK', 'subject': 'Automation Generated Body {{first_name}} {{last_name}} {{fullname}} {{custom_tag_2}} {{optout}}', 'recipientListId': self.details['groupVersionResult']['TEST']['id'], 'overallRecipientCount': self.details['groupVersionResult']['TEST']['customer_count'], 'expectedDeliveryCount': self.details['groupVersionResult']['TEST']['customer_count'], 'groupName': self.details['groupName'] } communicationDetailObject = VenenoObject.communicationDetail( cdDetailsBody) communicationId = self.connObj.addMessageForRecipients( communicationDetailObject) VenenoDBAssertion(cdDetailsBody['campaignId'], cdDetailsBody['communicationType'], communicationId, cdDetailsBody['overallRecipientCount'], cdDetailsBody['recipientListId'], cdDetailsBody['subject'], testControlType='custom', skippedReasons=['Custom Tag Not Present']).check()
def test_veneno_skippedUser_invalidMobile(self): originalListId = self.listId originalBucketId = self.bucketId originalGroupVersionDetail = self.groupVersionResult try: messagePayloadToUpdate = { 'senderDetails':{ 'domainGatewayMapId':constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId':constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults':False, 'cdmaSenderId':constant.config['message_senders']['cdmaSenderId'] }, 'message' : 'This Message is Going to Skip Due Invalid User : {{optout}}' } invalidUserData = 'ndncFirstName,ndncLastName,{}'.format(dbCallsMessage.getInvalidUserMobileNumber()[0]) mergeListresponse, mergeListPayload, campaignId = campaignList.mergeList({'name': 'IRIS_LIST_' + str(int(time.time() * 100000)), 'recipients':{'dataSource':'CSV', 'schema':'firstName,lastName,mobile', 'data':[invalidUserData]}}, campaignId=self.campaignId) self.listId = mergeListresponse['json']['entity']['listId'] self.groupVersionResult = dbCallsList.getGroupVersionDetailsWithGroupId(mergeListresponse['json']['entity']['listId']) self.bucketId = self.groupVersionResult['TEST']['bucket_id'] messageResponse, messagePayload = campaignMessage.createMessage(self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest(self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody(self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId , communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], testControlType='skip', skippedReasons=['Captured mobile for user seems to be invalid']).check() authorize.assertUserPresenceInSkippedTable(communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['INVALID_MOBILE'], 'Captured mobile for user seems to be invalid') except Exception, exp: Assertion.constructAssertion(False, exp)
def test_venenoThrift_inboxUser_Email_GenericTags(self): cdDetailsBody = { 'campaignId': self.details['campaignId'], 'communicationType': 'EMAIL', 'subject': 'Automation Generated Body {{first_name}} {{last_name}} {{fullname}} {{unsubscribe}}', 'recipientListId': self.details['groupVersionResult']['TEST']['id'], 'overallRecipientCount': self.details['groupVersionResult']['TEST']['customer_count'], 'expectedDeliveryCount': self.details['groupVersionResult']['TEST']['customer_count'], 'groupName': self.details['groupName'] } communicationDetailObject = VenenoObject.communicationDetail( cdDetailsBody) communicationId = self.connObj.addMessageForRecipients( communicationDetailObject) VenenoDBAssertion(cdDetailsBody['campaignId'], cdDetailsBody['communicationType'], communicationId, cdDetailsBody['overallRecipientCount'], cdDetailsBody['recipientListId'], cdDetailsBody['subject'], testControlType='custom').check()
def test_venenoThrift_skippeduser_Email_pointsMessageConfiguredError(self): cdDetailsBody = {'campaignId':self.details['campaignId'], 'communicationType':'EMAIL', 'subject':'Automation Generated Body {{first_name}} {{last_name}} {{fullname}} {{promotion_points}} {{unsubscribe}}', 'recipientListId':self.details['groupVersionResult']['TEST']['id'], 'overallRecipientCount':self.details['groupVersionResult']['TEST']['customer_count'], 'expectedDeliveryCount':self.details['groupVersionResult']['TEST']['customer_count'], 'groupName':self.details['groupName'] } extraDefaultPrams = { "default_argument":{ "drag_drop_id": None, "entity_id":-1, "expiry_strategy_id": "7496", "is_drag_drop": 0, "is_list_processed_for_reachability": True, "msg_count": "1", "program_id": "1215", "promotion_id": 8616, "reachability_rules": "UNABLE_TO_VERIFY,VALID,SOFTBOUNCED", "sendToNdnc": "false", "till_id": "50012200", "useTinyUrl": "false" } } communicationDetailObject = VenenoObject.communicationDetail(cdDetailsBody, extraParams=extraDefaultPrams) communicationId = self.connObj.addMessageForRecipients(communicationDetailObject) VenenoDBAssertion(cdDetailsBody['campaignId'], cdDetailsBody['communicationType'], communicationId, cdDetailsBody['overallRecipientCount'], cdDetailsBody['recipientListId'], cdDetailsBody['subject'], testControlType='skip', skippedReasons=['Message is not configured properly and is missing points related properties']).check()
def test_veneno_skippedUser_noStore_ProdSanity(self, storeType, errorType, errorMessage): originalListId = self.listId originalBucketId = self.bucketId originalGroupVersionDetail = self.groupVersionResult try: messagePayloadToUpdate = { 'senderDetails':{ 'domainGatewayMapId':constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId':constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults':False, 'cdmaSenderId':constant.config['message_senders']['cdmaSenderId'] }, 'message' : 'This Message is Going to Skip Due to Store Name Tag used :{{store_name}} {{optout}}', 'storeType' : storeType } mergeListresponse, mergeListPayload, campaignId = campaignList.mergeList({}, campaignId=self.campaignId) self.listId = mergeListresponse['json']['entity']['listId'] self.groupVersionResult = dbCallsList.getGroupVersionDetailsWithGroupId(mergeListresponse['json']['entity']['listId']) self.bucketId = self.groupVersionResult['TEST']['bucket_id'] messageResponse, messagePayload = campaignMessage.createMessage(self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest(self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody(self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId , communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], testControlType='skip', skippedReasons=[errorMessage]).check() authorize.assertUserPresenceInSkippedTable(communicationDetailId, communicationDetailBucketId, errorType, errorMessage) except Exception, exp: Assertion.constructAssertion(False, exp)
def test_veneno_rateLimit_MonthlyByPass(self, listType): VenenoHelper.setupStrategy(daily=3, weekly=2, monthly=1, channel='PUSH') VenenoHelper.updateWindowValueToByPassStrategy( self.testObjectForRateLimit['list'][listType] ['campaignGroupRecipients']['TEST'], 'MONTHLY', channel='PUSH') self.listId = self.testObjectForRateLimit['list'][listType][ 'groupDetails']['id'] cdDetailsBody = { 'campaignId': self.testObjectForRateLimit['campaign']['id'], 'communicationType': 'PUSH', 'subject': 'Automation Generated Body', 'body': '{"templateData":{"CHANNELACCOUNTNAME":{"luid":"{{luid}}","cuid":"{{cuid}}","communicationId":"{{communicationId}}","title":"asas","message":"asasas","expandableDetails":{"style":"BIG_TEXT","message":"asasas"},"custom":[]}}}' .replace('CHANNELACCOUNTNAME', self.account), 'recipientListId': self.testObjectForRateLimit['list'][listType] ['groupVersionDetails']['TEST']['id'], 'overallRecipientCount': self.testObjectForRateLimit['list'][listType] ['groupVersionDetails']['TEST']['customer_count'], 'expectedDeliveryCount': self.testObjectForRateLimit['list'][listType] ['groupVersionDetails']['TEST']['customer_count'], 'groupName': self.testObjectForRateLimit['list'][listType]['groupDetails'] ['group_label'] } communicationDetailObject = VenenoObject.communicationDetail( cdDetailsBody) communicationId = self.connObj.addMessageForRecipients( communicationDetailObject) VenenoDBAssertion(cdDetailsBody['campaignId'], cdDetailsBody['communicationType'], communicationId, cdDetailsBody['overallRecipientCount'], cdDetailsBody['recipientListId'], cdDetailsBody['subject']).check() authorize.assertUserPresenceInNsAdminTable( communicationId, VenenoHelper.getCommunicationBucketId(communicationId), int( json.loads( self.testObjectForRateLimit['list'][listType] ['groupVersionDetails']['TEST']['params'])['test_count']), verify=False) authorize.dbAssertRateLimitStats( self.testObjectForRateLimit['list'][listType] ['campaignGroupRecipients']['TEST'], { 'DAILY': 3, 'WEEKLY': 2, 'MONTHLY': 1 }, channel='PUSH')
def test_veneno_skippedUser_couponExpired(self): try: self.couponConfigChange({ 'fixedExpiryDate': int(time.time() * 1000 - 24 * 60 * 60 * 1000) }) time.sleep(70) messagePayloadToUpdate = { 'incentive': { 'type': 'COUPONS', 'voucherSeriesId': self.voucherId }, 'senderDetails': { 'domainGatewayMapId': constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId': constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults': False, 'cdmaSenderId': constant.config['message_senders']['cdmaSenderId'] }, 'message': 'This Message is Going to Skip Due to Coupon not issuable as its Expired : {{voucher}} {{optout}}' } messageResponse, messagePayload = campaignMessage.createMessage( self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest( self.campaignId, messageResponse['json']['entity']['messageId']) messageResponse, messagePayload = campaignMessage.createMessage( self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest( self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody( self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId, communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId( self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion( self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], skippedReasons=['coupon series expired']).check() authorize.assertUserPresenceInSkippedTable( communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['COUPON_EXPIRED'], 'coupon series expired') except Exception, exp: Assertion.constructAssertion(False, exp)
def test_veneno_rateLimit_reconfig_allStrategySatisified_StatsUpdateCheck(self, listType): VenenoHelper.setupStrategy(daily=3, weekly=3, monthly=3) self.listId = self.testObjectForRateLimit['list'][listType]['groupDetails']['id'] authorizeResult = VenenoHelper.authorizeForRateLimit(self, listType) communicationDetailId ,communicationDetailBucketId ,communicationDetailExpectedCount=authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId,authorizeResult['groupVersionResult']['TEST']['id'],authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, authorizeResult['groupVersionResult']['TEST']['customer_count'], authorizeResult['groupVersionResult']['TEST']['id'], authorizeResult['payload']['message'],testControlType='custom').check() authorize.assertUserPresenceInNsAdminTable(communicationDetailId , communicationDetailBucketId, int(communicationDetailExpectedCount)) authorize.dbAssertRateLimitStats(self.testObjectForRateLimit['list'][listType]['campaignGroupRecipients']['TEST'], {'DAILY':3, 'WEEKLY':3, 'MONTHLY':3})
def test_veneno_rateLimitsss_dailyLimitExceed(self, listType): self.listId = self.testObjectForRateLimit['list'][listType]['groupDetails']['id'] authorizeResult = VenenoHelper.authorizeForRateLimit(self, listType) authorize.assertAuthorize(authorizeResult['authorizeResponse'], 200) communicationDetailId ,communicationDetailBucketId, communicationDetailExpectedCount=authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId,authorizeResult['groupVersionResult']['TEST']['id'],authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, authorizeResult['groupVersionResult']['TEST']['customer_count'], authorizeResult['groupVersionResult']['TEST']['id'], authorizeResult['payload']['message'],testControlType='custom',skippedReasons=['rate limit crossed for user']).check() authorize.assertUserPresenceInSkippedTable(communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['RATE_LIMIT_ERROR'], 'rate limit crossed for user') authorize.dbAssertRateLimitStats(self.testObjectForRateLimit['list'][listType]['campaignGroupRecipients']['TEST'], {'DAILY':1, 'WEEKLY':1, 'MONTHLY':1})
def test_veneno_rateLimitsss_allStrategySatisified_sms_sanity(self, listType): self.listId = self.testObjectForRateLimit['list'][listType]['groupDetails']['id'] authorizeResult = VenenoHelper.authorizeForRateLimit(self, listType) authorize.assertAuthorize(authorizeResult['authorizeResponse'], 200) communicationDetailId ,communicationDetailBucketId ,communicationDetailExpectedCount=authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId,authorizeResult['groupVersionResult']['TEST']['id'],authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, authorizeResult['groupVersionResult']['TEST']['customer_count'], authorizeResult['groupVersionResult']['TEST']['id'], authorizeResult['payload']['message'],testControlType='custom').check() authorize.assertUserPresenceInNsAdminTable(communicationDetailId , communicationDetailBucketId, int(communicationDetailExpectedCount)) authorize.dbAssertRateLimitStats(self.testObjectForRateLimit['list'][listType]['campaignGroupRecipients']['TEST'], {'DAILY':1, 'WEEKLY':1, 'MONTHLY':1})
def test_veneno_rateLimit_SetWithSomeNegativeValue(self, listType): VenenoHelper.setupStrategy(daily=-1, weekly=-1, monthly=-1) VenenoHelper.updateWindowValueToByPassStrategy(self.testObjectForRateLimit['list'][listType]['campaignGroupRecipients']['TEST'], 'MONTHLY') self.listId = self.testObjectForRateLimit['list'][listType]['groupDetails']['id'] authorizeResult = VenenoHelper.authorizeForRateLimit(self, listType) communicationDetailId ,communicationDetailBucketId, communicationDetailExpectedCount=authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId,authorizeResult['groupVersionResult']['TEST']['id'],authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, authorizeResult['groupVersionResult']['TEST']['customer_count'], authorizeResult['groupVersionResult']['TEST']['id'], authorizeResult['payload']['message'],testControlType='custom',skippedReasons=['rate limit crossed for user']).check() authorize.assertUserPresenceInSkippedTable(communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['RATE_LIMIT_ERROR'], 'rate limit crossed for user') authorize.dbAssertRateLimitStats(self.testObjectForRateLimit['list'][listType]['campaignGroupRecipients']['TEST'], {'DAILY':3, 'WEEKLY':2, 'MONTHLY':1})
def test_veneno_skippedUser_nonLoyaltyCustomer(self): originalListId = self.listId originalBucketId = self.bucketId originalGroupVersionDetail = self.groupVersionResult try: messagePayloadToUpdate = { 'senderDetails': { 'domainGatewayMapId': constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId': constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults': False, 'cdmaSenderId': constant.config['message_senders']['cdmaSenderId'] }, 'message': 'This Message is Going to Skip Due to Loyalty Tag used :{{loyalty_points}} {{optout}}' } mergeListresponse, mergeListPayload, campaignId = campaignList.mergeList( {}, campaignId=self.campaignId) self.listId = mergeListresponse['json']['entity']['listId'] self.groupVersionResult = dbCallsList.getGroupVersionDetailsWithGroupId( mergeListresponse['json']['entity']['listId']) self.bucketId = self.groupVersionResult['TEST']['bucket_id'] messageResponse, messagePayload = campaignMessage.createMessage( self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest( self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody( self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId, communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId( self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion( self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], skippedReasons=['Users are not registered in loyalty program' ]).check() authorize.assertUserPresenceInSkippedTable( communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['NON_LOYALTY_CUSTOMER'], 'Users are not registered in loyalty program') except Exception, exp: Assertion.constructAssertion(False, exp)
def validateVariantToCommunicationDetailsFlow(self): variant_creation_key = 'VARIANT_CREATION' if not self.personalizedMessage else 'PERSONALIZED_VARIANT_CREATION' for eachVariant in self.messageDbInfo['messageJobDetails_collection'][ variant_creation_key]: for varient in eachVariant['variant_detail']: if varient['skipTestControl']: self.testControlType = 'skip' messageQueueId = varient['messageVariantId'] communicationDetailId, channel = message_calls( ).getCommunicationDetails(self.messageId, messageQueueId) listMetaInfo = meta_details( groupId=varient['audienceId'], groupVersionDetails=True).metaDetail numberOfUsers = listMetaInfo['groupVersionDetails']['TEST'][ 'customer_count'] groupVersionIdForTargetAudience = listMetaInfo[ 'groupVersionDetails']['TEST']['id'] self.validateEntryInCron(varient['cronTaskId'], varient['_id']) if channel in ['SMS', 'CALL_TASK']: messageBody = varient['messageContent']['messageBody'] elif channel == 'EMAIL': messageBody = varient['messageContent']['emailSubject'] elif channel == 'PUSH': messageBody = varient['messageContent']['messageSubject'] else: raise Exception('OtherChannelNotSupportedException') venenoObject = VenenoDBAssertion( self.campaignId, channel, communicationDetailId, numberOfUsers, groupVersionIdForTargetAudience, messageBody, self.testControlType.lower(), self.skippedReason, self.cguhVerify) if venenoObject.initFailureForStickyList: venenoObject.check() if channel == 'PUSH': self.validatePushBody( venenoObject.communicationDetailResult['body'])
def test_veneno_inboxUser_ProdSanity(self, description, messageInfo): authorizeResult = authorize.authorizeCampaign(self, messageInfo, False) authorize.assertAuthorize(authorizeResult['authorizeResponse'], 200) communicationDetailId, communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId( self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, messageInfo[0], communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message']).check() authorize.assertUserPresenceInNsAdminTable( communicationDetailId, communicationDetailBucketId, int(communicationDetailExpectedCount))
def test_veneno_skippedUser_noGroupTagPresent_ProdSanity(self): messagePayloadToUpdate = { 'senderDetails':{ 'domainGatewayMapId':constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId':constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults':False, 'cdmaSenderId':constant.config['message_senders']['cdmaSenderId'] }, 'message' : 'This Message is Going to Skip Due to group Tag Not Present in List :{{group_tag_1}} {{optout}}' } messageResponse, messagePayload = campaignMessage.createMessage(self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest(self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody(self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId , communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], testControlType='skip', skippedReasons=['Group Tag Not Present']).check() authorize.assertUserPresenceInSkippedTable(communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['GROUP_TAG_NOT_PRESENT'], 'Group Tag Not Present')
def test_veneno_inboxUser_GroupTagPresent(self): messagePayloadToUpdate = { 'senderDetails': { 'domainGatewayMapId': constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId': constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults': False, 'cdmaSenderId': constant.config['message_senders']['cdmaSenderId'] }, 'message': 'This Message is Going to Inbox Due to group Tag Present in List :{{group_tag_1}} {{optout}}' } mergeListresponse, mergeListPayload, campaignId = campaignList.mergeList( { 'groupTags': ['TestAutomation_GroupTag1', 'TestAutomation_GroupTag2'] }, campaignId=self.campaignId) self.listId = mergeListresponse['json']['entity']['listId'] self.groupVersionResult = dbCallsList.getGroupVersionDetailsWithGroupId( mergeListresponse['json']['entity']['listId']) self.bucketId = self.groupVersionResult['TEST']['bucket_id'] messageResponse, messagePayload = campaignMessage.createMessage( self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest( self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody( self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId, communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId( self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message']).check() authorize.assertUserPresenceInNsAdminTable( communicationDetailId, communicationDetailBucketId, 1)
def test_venenoThrift_inboxUser_Line_Sanity(self): actualOrgId = construct.updateOrgId(constant.config['line']['orgId']) actualOrgName = construct.updateOrgName(constant.config['line']['orgName']) try: details = VenenoHelper.preRequisitesForVenenoLine(testControlType='skip') cdDetailsBody = { 'campaignId':details['campaignId'], 'communicationType':'LINE', 'subject':'{"to":"{{line_id}}","messages":[{"type":"text","text":"Automated Call {{user_id_b64}}"}]}', 'body':'', 'recipientListId':details['groupVersionResult']['TEST']['id'], 'overallRecipientCount':details['groupVersionResult']['TEST']['customer_count'], 'expectedDeliveryCount':details['groupVersionResult']['TEST']['customer_count'], 'groupName':details['groupName'] } communicationDetailObject = VenenoObject.communicationDetail(cdDetailsBody) communicationId = self.connObj.addMessageForRecipients(communicationDetailObject) VenenoDBAssertion(cdDetailsBody['campaignId'], cdDetailsBody['communicationType'], communicationId, cdDetailsBody['overallRecipientCount'], cdDetailsBody['recipientListId'], cdDetailsBody['subject'], testControlType='skip').check() except Exception, exp: raise Exception('Line Failure ,due to :{}'.format(exp))
def est_venenoThrift_inboxUser_MobilePush_IOS(self): actualOrgId = construct.updateOrgId(constant.config['mobilepush']['orgId']) actualOrgName = construct.updateOrgName(constant.config['mobilepush']['orgName']) try: details = VenenoHelper.preRequisitesForVenenoMobilePush('ios',testControlType='skip') cdDetailsBody = { 'campaignId':details['campaignId'], 'communicationType':'PUSH', 'subject':'Automation Generated Body ', 'body':'{"templateData":{"ANDROID":{"luid":"{{luid}}","cuid":"{{cuid}}","communicationId":"{{communicationId}}","title":"hi {{first_name}}","message":"{{first_name}}","expandableDetails":{"style":"BIG_TEXT","message":"{{first_name}}"},"custom":[]},"IOS":{"luid":"{{luid}}","cuid":"{{cuid}}","communicationId":"{{communicationId}}","title":"hi {{first_name}}","message":"{{first_name}}","expandableDetails":{"style":"BIG_TEXT","message":"hi {{first_name}}","ctas":[]},"custom":[]}}}', 'recipientListId':details['groupVersionResult']['TEST']['id'], 'overallRecipientCount':details['groupVersionResult']['TEST']['customer_count'], 'expectedDeliveryCount':details['groupVersionResult']['TEST']['customer_count'], 'groupName':details['groupName'] } communicationDetailObject = VenenoObject.communicationDetail(cdDetailsBody) communicationId = self.connObj.addMessageForRecipients(communicationDetailObject) VenenoDBAssertion(cdDetailsBody['campaignId'], cdDetailsBody['communicationType'], communicationId, cdDetailsBody['overallRecipientCount'], cdDetailsBody['recipientListId'], cdDetailsBody['subject'], testControlType='skip').check() except Exception, exp: raise Exception('MobilePush Failure ,due to :{}'.format(exp))
def test_veneno_skippedUser_couponReedemed_ProdSanity(self): try: cusObj = InTouchAPI(Transaction.Add()) mergeListresponse, mergeListPayload, campaignId = campaignList.mergeList({'name': 'IRIS_LIST_' + str(int(time.time() * 100000)), 'recipients':{'dataSource':'CSV', 'schema':'firstName,lastName,mobile', 'data':['TestX,AutomationX,{}'.format(cusObj.params['mobile'])]}}, campaignId=self.campaignId) self.listId = mergeListresponse['json']['entity']['listId'] self.groupVersionResult = dbCallsList.getGroupVersionDetailsWithGroupId(mergeListresponse['json']['entity']['listId']) self.bucketId = self.groupVersionResult['TEST']['bucket_id'] self.couponConfigChange({'allow_multiple_vouchers_per_user':False,'same_user_multiple_redeem':False,'multiple_use':False}) time.sleep(70) messagePayloadToUpdate = { 'incentive':{ 'type':'COUPONS', 'voucherSeriesId':self.voucherId }, 'senderDetails':{ 'domainGatewayMapId':constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId':constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults':False, 'cdmaSenderId':constant.config['message_senders']['cdmaSenderId'] }, 'message' : 'This Message is Going to Skip Due to Coupon has already been redeemed : {{voucher}} {{optout}}' } messageResponse, messagePayload = campaignMessage.createMessage(self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest(self.campaignId, messageResponse['json']['entity']['messageId']) custObjResponse = cusObj.response # json.loads(cusObj.response.replace("'", "\"")) couponCode = dbCallsCoupons.getCouponCode(self.voucherId, custObjResponse['response']['transactions']['transaction'][0]['customer']['user_id']) coupObj = InTouchAPI(Coupon.Redeem(body={'root':{'coupon':{'transaction':{'number':cusObj.params['transactionId'], 'amount':100}}}}, mobile=cusObj.params['mobile'], code=couponCode)) messageResponse, messagePayload = campaignMessage.createMessage(self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest(self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody(self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId , communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], testControlType='skip', skippedReasons=['Coupon For user was already redeemed.']).check() authorize.assertUserPresenceInSkippedTable(communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors']['COUPON_REDEEMED'], 'Coupon For user was already redeemed.') except Exception, exp: Assertion.constructAssertion(False, exp)
def test_veneno_inboxUser_CustomFiledValue_ProdSanity(self): obj = InTouchAPI(Customer.Add(body={'root':{'customer':{'custom_fields':{'field':{'name':'gender', 'value':'Male'}}}}})) mergeListresponse, mergeListPayload, campaignId = campaignList.mergeList({'name': 'IRIS_LIST_' + str(int(time.time() * 100000)), 'recipients':{'dataSource':'CSV', 'schema':'firstName,lastName,mobile', 'data':['TestX,AutomationX,{}'.format(obj.params['mobile'])]}}, campaignId=self.campaignId) self.listId = mergeListresponse['json']['entity']['listId'] self.groupVersionResult = dbCallsList.getGroupVersionDetailsWithGroupId(mergeListresponse['json']['entity']['listId']) self.bucketId = self.groupVersionResult['TEST']['bucket_id'] messagePayloadToUpdate = { 'senderDetails':{ 'domainGatewayMapId':constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId':constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults':False, 'cdmaSenderId':constant.config['message_senders']['cdmaSenderId'] }, 'message' : 'This Message is Going to Inbox Due to custom Field Value : {{custom_field.gender}} {{optout}}' } messageResponse, messagePayload = campaignMessage.createMessage(self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest(self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = self.getAuthorizeResultBody(self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) communicationDetailId , communicationDetailBucketId , communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId(self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion(self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], testControlType='skip').check() authorize.assertUserPresenceInNsAdminTable(communicationDetailId , communicationDetailBucketId, 1)
def messageAuthorize(self, skippedError=[], isSkippedMessage=False, couponConfig=None): if couponConfig is not None: VenenoHelper.couponConfigChange(self, couponConfig) messagePayloadToUpdate = { 'incentive': { 'type': 'COUPONS', 'voucherSeriesId': self.voucherId }, 'senderDetails': { 'domainGatewayMapId': constant.config['message_senders']['domainGatewayMapId'], 'gsmSenderId': constant.config['message_senders']['gsmSenderId'], 'useSystemDefaults': False, 'cdmaSenderId': constant.config['message_senders']['cdmaSenderId'] }, 'message': 'This Message is Going to Skip Due to Coupon issuable : {{voucher}} {{optout}}' } messageResponse, messagePayload = campaignMessage.createMessage( self, payloadData=messagePayloadToUpdate) authorizeResponse = authorize.makeAuthorizeRequest( self.campaignId, messageResponse['json']['entity']['messageId']) authorizeResult = VenenoHelper.getAuthorizeResultBody( self.campaignId, self.listId, self.groupVersionResult, self.bucketId, self.voucherId, self.strategy, messagePayload, str(messageResponse['json']['entity']['messageId']), authorizeResponse) if not isSkippedMessage: communicationDetailId, communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId( self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion( self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], testControlType=self.testControlType).check() authorize.assertUserPresenceInNsAdminTable( communicationDetailId, communicationDetailBucketId, int(communicationDetailExpectedCount)) else: communicationDetailId, communicationDetailBucketId, communicationDetailExpectedCount = authorize.assertMessageQueueAndGetCommunicationDetailsForReferenceMessageQueueId( self.campaignId, self.groupVersionResult['TEST']['id'], authorizeResult['messageId']) VenenoDBAssertion( self.campaignId, 'SMS', communicationDetailId, self.groupVersionResult['TEST']['customer_count'], self.groupVersionResult['TEST']['id'], authorizeResult['payload']['message'], skippedReasons=[skippedError[1]], testControlType=self.testControlType).check() authorize.assertUserPresenceInSkippedTable( communicationDetailId, communicationDetailBucketId, constant.config['skipped_errors'][skippedError[0]], skippedError[1]) return communicationDetailId, communicationDetailBucketId, communicationDetailExpectedCount
def test_veneno_rateLimit_MonthlyByPass(self, listType): VenenoHelper.setupStrategy(daily=3, weekly=2, monthly=1, channel='WECHAT') VenenoHelper.updateWindowValueToByPassStrategy( self.testObjectForRateLimit['list'][listType] ['campaignGroupRecipients']['TEST'], 'MONTHLY', channel='WECHAT') self.listId = self.testObjectForRateLimit['list'][listType][ 'groupDetails']['id'] campaignMessage.getWeCRMTemplates() subject = { "template_id": unicodedata.normalize('NFKD', constant.config['templateId']).encode( 'ascii', 'ignore'), "touser": "******", "OriginalId": constant.config['wechat']['OriginalId'], "Title": "", "BrandId": "f", "url": "http://we.capillarytech-cn.com/web?appid=wxc7bf989decc7e35b&redirect_uri=http://somelink.com/someword?nowAParam=firstParam&second=second.Param&response_type=code&scope=snsapi_base&state=STATE", "TopColor": "#000000", "data": { "productType": { "value": "HakeemProduct", "color": "#00000" }, "name": { "value": "Hakeem {{first_name}} Lukka", "color": "#00000" }, "number": { "value": "898767 skdjnjn", "color": "#00000" }, "expDate": { "value": "look down", "color": "#00000" }, "remark": { "value": "Look up", "color": "#00000" } } } cdDetailsBody = { 'campaignId': self.testObjectForRateLimit['campaign']['id'], 'communicationType': 'WECHAT', 'subject': str(subject), 'body': 'Thrift Created Automation Wechat Body', 'recipientListId': self.testObjectForRateLimit['list'][listType] ['groupVersionDetails']['TEST']['id'], 'overallRecipientCount': self.testObjectForRateLimit['list'][listType] ['groupVersionDetails']['TEST']['customer_count'], 'expectedDeliveryCount': self.testObjectForRateLimit['list'][listType] ['groupVersionDetails']['TEST']['customer_count'], 'groupName': self.testObjectForRateLimit['list'][listType]['groupDetails'] ['group_label'] } communicationDetailObject = VenenoObject.communicationDetail( cdDetailsBody) communicationId = self.connObj.addMessageForRecipients( communicationDetailObject) VenenoDBAssertion( cdDetailsBody['campaignId'], cdDetailsBody['communicationType'], communicationId, cdDetailsBody['overallRecipientCount'], cdDetailsBody['recipientListId'], cdDetailsBody['subject'], skippedReasons=[ 'Captured OpenId for user seems to be unsubscribed', 'rate limit crossed for user' ]).check() authorize.dbAssertRateLimitStats( self.testObjectForRateLimit['list'][listType] ['campaignGroupRecipients']['TEST'], { 'DAILY': 3, 'WEEKLY': 2, 'MONTHLY': 1 }, channel='WECHAT')