def test_init__valid_creation(self):
        options = [
            objects.AudienceConditionOption('rainy', 'Rainy'),
            objects.AudienceConditionOption('snowy', 'Snowy')
        ]

        objects.AudienceCondition('Weather', options)
 def test_to_dict__proper_format_with_multi_layer_child_options(self):
     condition_option = objects.AudienceConditionOption(
         'sunny', 'Sunny', [
             objects.AudienceConditionOption(
                 'warm', 'Warm',
                 [objects.AudienceConditionOption('humid', 'Humid')])
         ])
     self.assertEqual(
         {
             'value':
             'sunny',
             'text':
             'Sunny',
             'child_options': [{
                 'value':
                 'warm',
                 'text':
                 'Warm',
                 'child_options': [{
                     'value': 'humid',
                     'text': 'Humid',
                     'child_options': None
                 }]
             }]
         }, condition_option.to_dict())
    def test_init__invalid_child_option_entry(self):
        child_options = [
            objects.AudienceConditionOption('rainy', 'Rainy'), {
                'value': 'snowy',
                'text': 'Snowy'
            }
        ]

        with self.assertRaises(ValueError) as cm:
            objects.AudienceConditionOption('weather', 'Weather',
                                            child_options)

        self.assertEqual(
            'Each provided child option must be an instance of AudienceConditionOption.',
            str(cm.exception))
    def test_list_equality(self):
        options = [
            objects.AudienceConditionOption('rainy', 'Rainy'),
            objects.AudienceConditionOption('snowy', 'Snowy')
        ]

        test_condition_list_1 = [objects.AudienceCondition('Weather', options)]
        test_condition_list_2 = [objects.AudienceCondition('Weather', options)]
        # since __hash__ is set to None, collections.Counter comparison using memory addresses shouldn't be performed and
        # __eq__ should be called instead. Refer to: https://docs.python.org/2/reference/datamodel.html#object.__hash__
        try:
            self.assertItemsEqual(test_condition_list_1, test_condition_list_2)
        except AttributeError:
            # for Python 3.2+
            self.assertCountEqual(test_condition_list_1, test_condition_list_2)
 def test_to_dict__proper_format_without_child_options(self):
     condition_option = objects.AudienceConditionOption('sunny', 'Sunny')
     self.assertEqual(
         {
             'value': 'sunny',
             'text': 'Sunny',
             'child_options': None
         }, condition_option.to_dict())
示例#6
0
    def test_get_dynamic_audience_conditions__successful_fetch(self):
        SAMPLE_APP_SETTINGS = {'account_id': 83043022}

        MOCK_RESPONSE_OBJECT = mock.Mock()
        MOCK_RESPONSE_OBJECT.status_code = 200
        MOCK_RESPONSE_OBJECT.json.return_value = {
            "campaigns": [{
                "name": "Age: 20-30",
                "identifier": "age_20_30"
            }, {
                "name": "Buying:scooter",
                "identifier": "buying_scooters"
            }, {
                "name": "Browser:chrome",
                "identifier": "browser_chrome"
            }]
        }
        EXPECTED_AUDIENCE_CONDITIONS = [
            objects.AudienceCondition('Sample Condition', [
                objects.AudienceConditionOption('age_20_30', 'Age: 20-30'),
                objects.AudienceConditionOption('buying_scooters',
                                                'Buying:scooter'),
                objects.AudienceConditionOption('browser_chrome',
                                                'Browser:chrome')
            ])
        ]

        with mock.patch(
                'requests.get',
                return_value=MOCK_RESPONSE_OBJECT) as mock_requests_get:
            audience_conditions = functions.get_dynamic_audience_conditions(
                SAMPLE_APP_SETTINGS)

        self.assertItemsEqual(EXPECTED_AUDIENCE_CONDITIONS,
                              audience_conditions)

        mock_requests_get.assert_called_once_with(
            'https://integrations.optimizely.how/api/83043022/campaigns.json')
def get_dynamic_audience_conditions(integration_settings):
    AUDIENCE_OPTIONS_ENDPOINT = (
        'https://integrations.optimizely.how/api/{0}/campaigns.json')

    account_id = integration_settings['account_id']
    request_url = AUDIENCE_OPTIONS_ENDPOINT.format(account_id)
    response = requests.get(request_url).json()

    # Build list of audience conditions
    audience_condition_options = []

    try:
        for campaign in response['campaigns']:
            condition = objects.AudienceConditionOption(
                campaign['identifier'], campaign['name'].strip())
            audience_condition_options.append(condition)

        return [
            objects.AudienceCondition('Sample Condition',
                                      audience_condition_options)
        ]
    except:
        raise