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())
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