示例#1
0
 def test_reschedule_campaign_with_valid_data(
         self, token_first, campaign_in_db, talent_pool, candidate_first,
         smartlist_first, schedule_a_campaign, candidate_device_first):
     """
     Reschedule a campaign with valid data and it should return 200 response.
     """
     sleep(15)
     data = generate_campaign_schedule_data(frequency_id=Frequency.DAILY)
     response = send_request(
         'put', PushCampaignApiUrl.SCHEDULE % campaign_in_db['id'],
         token_first, data)
     assert response.status_code == codes.OK
     response = response.json()
     assert 'task_id' in response
     assert 'message' in response
     task_id = response['task_id']
     assert task_id
     # campaign = get_campaign(campaign_in_db['id'], token_first)['campaign']
     # match_schedule_data(data, campaign)
     retry(get_blasts,
           attempts=30,
           sleepscale=1,
           sleeptime=3,
           retry_exceptions=(AssertionError, ),
           args=(campaign_in_db['id'], token_first),
           kwargs={'count': 2})
示例#2
0
 def test_get_with_deleted_url_conversion(self, url_conversion,
                                          token_first):
     """
     Here we first delete the url_conversion object. which internally deletes the
     sms_campaign_send record as it uses url_conversion as primary key. We then test
     functionality of process_url_redirect by making HTTP GET call to endpoint /v1/redirect.
     It should get ResourceNotFound Error. But candidate should only get internal server error.
     So this test asserts we get internal server error.
     """
     source_url = url_conversion['source_url']
     response = send_request(
         'delete', PushCampaignApiUrl.URL_CONVERSION % url_conversion['id'],
         token_first)
     assert response.status_code == codes.OK
     response = send_request('get', source_url, '', verify=False)
     assert response.status_code == codes.INTERNAL_SERVER_ERROR
示例#3
0
 def test_get_with_no_signature(self, url_conversion):
     """
     Removing signature of signed redirect URL. It should get internal server error.
     """
     url_without_signature = url_conversion['source_url'].split('?')[0]
     response = send_request('get', url_without_signature, '', verify=False)
     assert response.status_code == codes.INTERNAL_SERVER_ERROR
示例#4
0
 def test_get_with_invalid_signature(self, url_conversion):
     source_url = url_conversion['source_url']
     url_wit_invalid_signature = source_url.split(
         'signature=')[0] + 'signature=invalid_signature'
     response = send_request('get',
                             url_wit_invalid_signature,
                             '',
                             verify=False)
     assert response.status_code == codes.INTERNAL_SERVER_ERROR
示例#5
0
    def test_for_get(self, token_first, user_first, campaign_in_db,
                     url_conversion):
        """
        GET method should give OK response. We check the "hit_count" and "clicks" before
        hitting the endpoint and after hitting the endpoint. Then we assert that both
        "hit_count" and "clicks" have been successfully updated by '1' in database.
        """
        # stats before making HTTP GET request to source URL
        response = get_blasts(campaign_in_db['id'],
                              token_first,
                              expected_status=(codes.OK, ))
        blasts = response['blasts']
        assert len(blasts) == 1
        blast = blasts[0]
        hit_count, clicks = url_conversion['hit_count'], blast['clicks']
        response = send_request('get',
                                url_conversion['source_url'],
                                '',
                                verify=False)
        assert response.status_code == codes.OK, 'Response should be ok'

        response = send_request('get',
                                PushCampaignApiUrl.BLASTS %
                                campaign_in_db['id'],
                                token_first,
                                verify=False)
        assert response.status_code == codes.OK
        blasts = response.json()['blasts']
        assert len(blasts) == 1
        blast = blasts[0]

        response = send_request('get',
                                PushCampaignApiUrl.URL_CONVERSION %
                                url_conversion['id'],
                                token_first,
                                verify=False)
        assert response.status_code == codes.OK
        url_conversion = response.json()['url_conversion']

        updated_hit_counts, updated_clicks = url_conversion[
            'hit_count'], blast['clicks']
        assert updated_hit_counts == hit_count + 1
        assert updated_clicks == clicks + 1
示例#6
0
def get_campaign(campaign_id, token, expected_status=(200,)):
    """
    Get a push campaign from API given by campaign id.
    :type campaign_id: int | long
    :type token: string
    :type expected_status: tuple[int]
    :rtype dict
    """
    response = send_request('get', PushCampaignApiUrl.CAMPAIGN % campaign_id, token)
    logger.info('tests : get_campaign: %s', response.content)
    print('tests : get_campaign: %s', response.content)
    assert response.status_code in expected_status
    return response.json()
示例#7
0
def unschedule_campaign(campaign_id, token, expected_status=(200,)):
    """
    This method sends a DELETE request to Push Campaign API to unschedule a push campaign.
    :type campaign_id: int | long
    :type token: string
    :type expected_status: tuple[int]
    :rtype dict
    """
    response = send_request('delete', PushCampaignApiUrl.SCHEDULE % campaign_id, token)
    logger.info('tests : unschedule_campaign: %s', response.content)
    print('tests : unschedule_campaign: %s', response.content)
    assert response.status_code in expected_status
    return response.json()
示例#8
0
def delete_campaigns(data, token, expected_status=(200,)):
    """
    This method sends a DELETE request to Push Campaign API to delete multiple campaigns.
    :type data: dict
    :type token: string
    :type expected_status: tuple[int]
    :rtype dict
    """
    response = send_request('delete', PushCampaignApiUrl.CAMPAIGNS, token, data=data)
    logger.info('tests : delete_campaigns: %s', response.content)
    print('tests : delete_campaigns: %s', response.content)
    assert response.status_code in expected_status
    return response.json()
示例#9
0
def delete_campaign(campaign_id, token, expected_status=(200,)):
    """
    This method sends a DELETE request to Push Campaign API to delete a campaign given by campaign_id.
    :type campaign_id: int | long
    :type token: string
    :type expected_status: tuple[int]
    :rtype dict
    """
    response = send_request('delete', PushCampaignApiUrl.CAMPAIGN % campaign_id, token)
    logger.info('tests : delete_campaign: %s', response.content)
    print('tests : delete_campaign: %s', response.content)

    assert response.status_code in expected_status
    return response.json()
示例#10
0
def reschedule_campaign(campaign_id, data, token, expected_status=(200,)):
    """
    This method sends a PUT request to Push Campaign API to reschedule a push campaign with given schedule data.
    :type campaign_id: int | long
    :type data: dict
    :type token: string
    :type expected_status: tuple[int]
    :rtype dict
    """
    response = send_request('put', PushCampaignApiUrl.SCHEDULE % campaign_id, token, data)
    logger.info('tests: reschedule_campaign: %s', response.content)
    print('tests: reschedule_campaign: %s', response.content)
    assert response.status_code in expected_status
    return response.json()
示例#11
0
def send_campaign(campaign_id, token, expected_status=(200,)):
    """
    This method sends a POST request to Push Campaign API to send a campaign to associated candidates.
    :type campaign_id: int | long
    :type token: string
    :type expected_status: tuple[int]
    :rtype dict
    """
    url = PushCampaignApiUrl.SEND % campaign_id
    response = send_request('post', url, token)
    logger.info('tests : send_campaign: %s', response.content)
    print('tests : send_campaign: %s', response.content)
    assert response.status_code in expected_status
    return response.json()
示例#12
0
 def test_campaigns_delete_authorized_and_unauthorized_ids(self, token_first, campaign_in_db,
                                                           campaign_in_db_second):
     """
     Test with one authorized and one unauthorized push campaign. It should get 403
     status code.
     :param token_first: auth token
     :param campaign_in_db: campaign created by user_first
     :param campaign_in_db_second: campaign created by user_second
     """
     response = send_request('delete', URL, token_first, data={'ids': [campaign_in_db['id'],
                                                                       campaign_in_db_second['id']]})
     assert response.status_code == codes.FORBIDDEN
     data = {'ids': [campaign_in_db['id'], campaign_in_db_second['id']]}
     delete_campaigns(data, token_first, expected_status=(codes.FORBIDDEN,))
示例#13
0
def get_campaigns(token, page=DEFAULT_PAGE, per_page=DEFAULT_PAGE_SIZE, expected_status=(200,)):
    """
    Get campaign of a specific user.
    Default page number is 1 and per_page (page size) is 10
    :type page: int | long
    :type per_page: int | long
    :type token: string
    :type expected_status: tuple[int]
    """
    query = '?page=%s&per_page=%s' % (page, per_page)
    response = send_request('get', PushCampaignApiUrl.CAMPAIGNS + query, token)
    logger.info('tests : get_campaigns: %s', response.content)
    print('tests : get_campaigns: %s', response.content)
    assert response.status_code in expected_status
    return response.json()
示例#14
0
 def test_get_with_deleted_campaign(self, token_first, campaign_in_db,
                                    url_conversion):
     """
     Here we first delete the campaign, and then test functionality of process_url_redirect
     by making HTTP GET call to endpoint /v1/redirect. It should give ResourceNotFound Error.
     But candidate should get Internal server error. Hence this test should get internal server
     error.
     """
     delete_campaign(campaign_in_db['id'],
                     token_first,
                     expected_status=(codes.OK, ))
     response = send_request('get',
                             url_conversion['source_url'],
                             '',
                             verify=False)
     assert response.status_code == codes.INTERNAL_SERVER_ERROR
示例#15
0
def create_campaign(data, token, expected_status=(201,)):
    """
    Send a POST request to Push Campaign API with campaign data to create a new Push Campaign.
    :type data: dict
    :type token: string
    :type expected_status: tuple[int]
    :rtype dict
    """
    response = send_request('post', PushCampaignApiUrl.CAMPAIGNS, token, data)
    logger.info('tests : create_campaign: %s', response.content)
    print('tests : create_campaign: %s', response.content)
    assert response.status_code in expected_status
    headers = response.headers
    response = response.json()
    response['headers'] = headers
    return response
示例#16
0
def get_blast(blast_id, campaign_id, token, expected_status=(200,), sends=None):
    """
    This method sends a GET request to Push Campaign API to get a specific blast associated with
     a campaign given by campaign_id.
    :type blast_id: int | long
    :type campaign_id: int | long
    :type token: string
    :type expected_status: tuple[int]
    :type sends: int | None
    :rtype dict
    """
    response = send_request('get', PushCampaignApiUrl.BLAST % (campaign_id, blast_id),
                            token)

    assert response.status_code in expected_status
    response = response.json()
    if sends:
        assert response['blast']['sends'] == sends
    return response
示例#17
0
def get_blasts(campaign_id, token, page=DEFAULT_PAGE, per_page=DEFAULT_PAGE_SIZE, expected_status=(200,), count=None):
    """
    This method sends a GET request to Push Campaign API to get a list of blasts associated with
     a campaign given by campaign_id.
    :type campaign_id: int | long
    :type token: string
    :type page: int | long
    :type per_page: int | long
    :type expected_status: tuple[int]
    :type count: int | None
    :rtype dict
    """
    query = '?page=%s&per_page=%s' % (page, per_page)
    response = send_request('get', PushCampaignApiUrl.BLASTS % campaign_id + query, token)
    logger.info('tests : get_blasts: %s', response.content)
    print('tests : get_blasts: %s', response.content)
    assert response.status_code in expected_status
    response = response.json()
    if count:
        assert len(response['blasts']) == count
    return response
示例#18
0
def get_blast_sends(blast_id, campaign_id, token, page=DEFAULT_PAGE, per_page=DEFAULT_PAGE_SIZE,
                    expected_status=(200,), count=None):
    """
    This method sends a GET request to Push Campaign API to get a list of sends associated to a specific blast.
    :type blast_id: int | long
    :type campaign_id: int | long
    :type token: string
    :type page: int | long
    :type per_page: int | long
    :type expected_status: tuple[int]
    :type count: int | None
    :rtype dict
    """
    query = '?page=%s&per_page=%s' % (page, per_page)
    response = send_request('get', PushCampaignApiUrl.BLAST_SENDS % (campaign_id, blast_id) + query,
                            token)
    assert response.status_code in expected_status
    response = response.json()
    if count:
        assert len(response['sends']) == count
    return response
示例#19
0
 def test_campaigns_delete_with_non_json_data(self, token_first):
     """
     User auth token is valid, but non JSON data provided. It should get bad request error.
     """
     response = send_request('delete', URL, token_first, data={'ids': [1, 2, 3]}, is_json=False)
     assert response.status_code == codes.BAD_REQUEST