示例#1
0
def periodic_scheduled_campaign(request, access_token_first,
                                smartlist_user1_domain1):
    """
    This creates a periodic scheduled campaign. It finally archives the email-campaign so that it does not
    get sent after the test has finished working.
    """
    subject = 'scheduled_periodic_email_campaign'
    campaign_data = create_data_for_campaign_creation(
        smartlist_user1_domain1['id'], subject=subject)
    campaign_data['frequency_id'] = Frequency.CUSTOM
    campaign_data['start_datetime'] = DatetimeUtils.to_utc_str(
        datetime.utcnow() + timedelta(seconds=START_DATETIME_OFFSET))
    campaign_data['end_datetime'] = DatetimeUtils.to_utc_str(
        datetime.utcnow() + timedelta(days=10))
    response = create_email_campaign_via_api(access_token_first, campaign_data)
    assert response.status_code == codes.CREATED
    resp_object = response.json()
    assert 'campaign' in resp_object
    campaign_id = resp_object['campaign']['id']
    assert campaign_id

    def fin():
        data = {'is_hidden': 1}
        CampaignsTestsHelpers.request_for_ok_response(
            'patch', EmailCampaignApiUrl.CAMPAIGN % campaign_id,
            access_token_first, data)

    request.addfinalizer(fin)
    return {'id': campaign_id}
示例#2
0
 def test_one_time_schedule_campaign_and_validate_task_run(self, access_token_first, headers, smartlist_user1_domain1):
     """
     Here we schedule an email campaign one time with all valid parameters. Then we check
     that task is run fine and assert the blast, sends and activity have been created
     in database.
     """
     subject = '%s-test_schedule_one_time' % fake.uuid4()
     campaign_data = create_data_for_campaign_creation(smartlist_user1_domain1['id'], subject=subject)
     campaign_data['start_datetime'] = DatetimeUtils.to_utc_str(datetime.utcnow()
                                                                + timedelta(seconds=self.START_DATETIME_OFFSET))
     response = create_email_campaign_via_api(access_token_first, campaign_data)
     assert response.status_code == codes.CREATED
     resp_object = response.json()
     assert 'campaign' in resp_object
     assert resp_object['campaign']['id']
     url = EmailCampaignApiUrl.CAMPAIGN % resp_object['campaign']['id']
     response = requests.get(url, headers=headers)
     assert response.status_code == codes.OK
     assert response.json()['email_campaign']
     email_campaign = response.json()['email_campaign']
     campaign_blast = CampaignsTestsHelpers.get_blasts_with_polling(email_campaign, access_token_first,
                                                                    self.BLASTS_URL % email_campaign['id'])
     CampaignsTestsHelpers.assert_blast_sends(
         email_campaign, self.EXPECTED_SENDS,
         blast_url=EmailCampaignApiUrl.BLAST % (email_campaign['id'], campaign_blast[0]['id']),
         access_token=access_token_first)
示例#3
0
    def test_schedule_campaign_daily_and_validate_run(self, headers, access_token_first, smartlist_user1_domain1):
        """
        This is test to schedule an email campaign on daily basis. This should get OK
        response. We also assert that scheduler is sending email-campaigns on expected time.
        """
        subject = '%s-test_schedule_daily' % fake.uuid4()
        campaign_data = create_data_for_campaign_creation(smartlist_user1_domain1['id'], subject=subject)
        campaign_data['frequency_id'] = Frequency.DAILY
        campaign_data['start_datetime'] = DatetimeUtils.to_utc_str(datetime.utcnow()
                                                                   + timedelta(seconds=self.START_DATETIME_OFFSET))
        campaign_data['end_datetime'] = DatetimeUtils.to_utc_str(datetime.utcnow() + timedelta(days=10))
        response = create_email_campaign_via_api(access_token_first, campaign_data)
        assert response.status_code == codes.CREATED
        resp_object = response.json()
        assert 'campaign' in resp_object
        assert resp_object['campaign']['id']
        url = EmailCampaignApiUrl.CAMPAIGN % resp_object['campaign']['id']
        response = requests.get(url, headers=headers)
        assert response.status_code == codes.OK
        assert response.json()['email_campaign']
        email_campaign = response.json()['email_campaign']

        # assert that scheduler has sent the campaign for the first time
        campaign_blast = CampaignsTestsHelpers.get_blasts_with_polling(email_campaign, access_token_first,
                                                                       self.BLASTS_URL % email_campaign['id'],
                                                                       count=1)
        CampaignsTestsHelpers.assert_blast_sends(
            email_campaign, self.EXPECTED_SENDS,
            blast_url=EmailCampaignApiUrl.BLAST % (email_campaign['id'], campaign_blast[0]['id']),
            access_token=access_token_first)
示例#4
0
 def test_create_campaign_and_send_now(self, access_token_first, headers,
                                       smartlist_user1_domain1):
     """
     Here we assume user has clicked the button "Send Now" from UI, it should send campaign immediately.
     """
     expected_sends = 2
     subject = '{}-send_campaign_now'.format(fake.uuid4())
     campaign_data = create_data_for_campaign_creation(
         smartlist_user1_domain1['id'], subject=subject)
     response = create_email_campaign_via_api(access_token_first,
                                              campaign_data)
     assert response.status_code == codes.CREATED
     resp_object = response.json()
     assert 'campaign' in resp_object
     assert resp_object['campaign']['id']
     url = EmailCampaignApiUrl.CAMPAIGN % resp_object['campaign']['id']
     response = requests.get(url, headers=headers)
     assert response.status_code == codes.OK
     assert response.json()['email_campaign']
     email_campaign = response.json()['email_campaign']
     campaign_blast = CampaignsTestsHelpers.get_blasts_with_polling(
         email_campaign, access_token_first,
         self.BLASTS_URL % email_campaign['id'])
     CampaignsTestsHelpers.assert_blast_sends(
         email_campaign,
         expected_sends,
         blast_url=EmailCampaignApiUrl.BLAST %
         (email_campaign['id'], campaign_blast[0]['id']),
         access_token=access_token_first)
示例#5
0
def campaign_with_archived_candidate(smartlist_with_archived_candidate,
                                     access_token_first):
    """
    This creates an email-campaign associated to smartlist which has one archived candidate in it.
    """
    campaign_data = create_scheduled_email_campaign_data(
        smartlist_id=smartlist_with_archived_candidate['id'])
    response = create_email_campaign_via_api(access_token_first, campaign_data)
    assert response.ok, 'campaign creation failed:%s' % response.text
    return response.json()['campaign']
示例#6
0
 def test_schedule_campaign_with_no_end_datetime(self, access_token_first, smartlist_user1_domain1_in_db):
     """
     This is test to schedule an email campaign periodically with no end_datetime. It should result in
     unprocessable entity.
     """
     campaign_data = create_data_for_campaign_creation(smartlist_user1_domain1_in_db['id'])
     campaign_data['frequency_id'] = Frequency.DAILY
     campaign_data['start_datetime'] = DatetimeUtils.to_utc_str(datetime.utcnow() + timedelta(seconds=10))
     response = create_email_campaign_via_api(access_token_first, campaign_data)
     assert response.status_code == codes.unprocessable_entity
示例#7
0
def create_and_get_email_campaign(campaign_data, access_token):
    """
    This creates an email-campaign using API and returns EmailCampaign object from database.
    """
    response = create_email_campaign_via_api(access_token, campaign_data)
    assert response.status_code == codes.CREATED, response.text
    resp_object = response.json()
    assert 'campaign' in resp_object
    campaign_id = resp_object['campaign']['id']
    assert campaign_id > 0, 'Expecting positive campaign_id'
    db.session.commit()
    campaign = EmailCampaign.get_by_id(campaign_id)
    return campaign
示例#8
0
 def test_create_email_campaign_without_client_id(
         self, access_token_first, smartlist_user1_domain1_in_db):
     """
     Here we provide valid data to create an email-campaign without email_client_id.
     It should get OK response.
     """
     campaign_data = create_scheduled_email_campaign_data(
         smartlist_user1_domain1_in_db['id'])
     response = create_email_campaign_via_api(access_token_first,
                                              campaign_data)
     assert response.status_code == requests.codes.CREATED
     resp_object = response.json()
     assert 'campaign' in resp_object
     assert resp_object['campaign']['id']
示例#9
0
 def test_create_email_campaign_with_invalid_email_client_id(
         self, access_token_first, smartlist_user1_domain1_in_db):
     """
     Here we try to create an email-campaign with invalid email-client-id. It should
     result in invalid usage error.
     """
     campaign_data = create_data_for_campaign_creation(
         smartlist_user1_domain1_in_db['id'])
     campaign_data[
         'email_client_id'] = CampaignsTestsHelpers.get_non_existing_id(
             EmailClient)
     response = create_email_campaign_via_api(access_token_first,
                                              campaign_data)
     assert response.status_code == InvalidUsage.http_status_code()
     json_response = response.json()
     assert 'email_client_id' in json_response['error']['message']
示例#10
0
 def test_create_email_campaign_with_optional_parameters(
         self, access_token_first, smartlist_user1_domain1_in_db):
     """
     The test is to examine that the email-campaign is created with optional parameter or not.
     It should get OK response.
     """
     subject = '%s-test_create_email_campaign_with_optional_parameters' % fake.uuid4(
     )
     campaign_data = create_data_for_campaign_creation(
         smartlist_user1_domain1_in_db['id'], subject=subject)
     for param in EMAIL_CAMPAIGN_OPTIONAL_PARAMETERS:
         campaign_data.update(param)
         response = create_email_campaign_via_api(access_token_first,
                                                  campaign_data)
         assert response.status_code == requests.codes.CREATED
         resp_object = response.json()
         assert 'campaign' in resp_object
         assert resp_object['campaign']['id']
示例#11
0
 def test_create_email_campaign_except_single_parameter(
         self, access_token_first, smartlist_user1_domain1_in_db):
     """
     Here we provide valid data to create an email-campaign with all parameter except single parameter.
     It should get OK response.
     """
     subject = '%s-test_create_email_campaign_except_single_parameter' % fake.uuid4(
     )
     campaign_data = create_data_for_campaign_creation_with_all_parameters(
         smartlist_user1_domain1_in_db['id'], subject=subject)
     for param in CAMPAIGN_OPTIONAL_FIELDS:
         campaign_test_data = campaign_data.copy()
         del campaign_test_data[param]
         response = create_email_campaign_via_api(access_token_first,
                                                  campaign_test_data)
         assert response.status_code == requests.codes.CREATED
         resp_object = response.json()
         assert 'campaign' in resp_object
         assert resp_object['campaign']['id']
示例#12
0
 def test_create_email_campaign_with_incoming_email_client(
         self, access_token_first, smartlist_user1_domain1_in_db,
         email_clients, headers):
     """
     Here we provide email-client of type "incoming". email-campaign should not be created.
     """
     campaign_data = create_scheduled_email_campaign_data(
         smartlist_user1_domain1_in_db['id'])
     # GET email-client-id
     response = requests.get(EmailCampaignApiUrl.EMAIL_CLIENTS +
                             '?type=incoming',
                             headers=headers)
     assert response.ok
     assert response.json()
     email_client_response = response.json()['email_client_credentials']
     assert len(email_client_response) == 2
     campaign_data['email_client_credentials_id'] = email_client_response[
         0]['id']
     response = create_email_campaign_via_api(access_token_first,
                                              campaign_data)
     assert response.status_code == requests.codes.BAD
示例#13
0
def email_campaign_with_outgoing_email_client(access_token_first,
                                              smartlist_user1_domain1, headers,
                                              outgoing_email_client):
    """
    This creates an email-campaign which will be sent via an SMTP server added by user.
    """
    campaign_data = create_scheduled_email_campaign_data(
        smartlist_user1_domain1['id'])
    # GET email-client-id
    response = requests.get(EmailCampaignApiUrl.EMAIL_CLIENTS +
                            '?type=outgoing',
                            headers=headers)
    assert response.ok
    assert response.json()
    email_client_response = response.json()['email_client_credentials']
    assert len(email_client_response) == 1
    campaign_data['email_client_credentials_id'] = email_client_response[0][
        'id']
    response = create_email_campaign_via_api(access_token_first, campaign_data)
    assert response.status_code == requests.codes.CREATED
    resp_object = response.json()
    assert 'campaign' in resp_object and resp_object['campaign']
    db.session.commit()
    return resp_object['campaign']
示例#14
0
 def test_create_email_campaign_with_outgoing_email_client(
         self, access_token_first, smartlist_user1_domain1_in_db,
         outgoing_email_client, headers):
     """
     Here we provide valid data to create an email-campaign with email_client_credentials_id.
     It should get OK response.
     """
     campaign_data = create_scheduled_email_campaign_data(
         smartlist_user1_domain1_in_db['id'])
     # GET email-client-id
     response = requests.get(EmailCampaignApiUrl.EMAIL_CLIENTS +
                             '?type=outgoing',
                             headers=headers)
     assert response.ok
     assert response.json()
     email_client_response = response.json()['email_client_credentials']
     assert len(email_client_response) == 1
     campaign_data['email_client_credentials_id'] = email_client_response[
         0]['id']
     response = create_email_campaign_via_api(access_token_first,
                                              campaign_data)
     assert response.status_code == requests.codes.CREATED
     resp_object = response.json()
     assert 'campaign' in resp_object and resp_object['campaign']