예제 #1
0
    def test_groups(self):
        scheme = Rim('digital')
        self.assertIsInstance(scheme.groups, dict)
        self.assertIsNone(scheme.groups['__default_group_name__']['report'])
        self.assertIsNone(scheme.groups['__default_group_name__']['filters'])

        scheme.lists = ['gender', 'column1c', 'q06', 'sta_wo', 'abschluss', 'q04']

        scheme.add_group(name='Apple', filter='ownership==1')
        self.assertIn('Apple', scheme.groups)
        scheme.add_group(name='Samsung', filter={'ownership': 2})
        self.assertIn('Samsung', scheme.groups)
        
        # Try an invalid filter
        # It should not contain any filters since it was called incorrectly
        with self.assertRaises(Exception):
            scheme.add_group(name='Motorola', filter='ownership3')

        # Check to see if the available methods to add filter are equal
        self.assertEqual(scheme.groups['Samsung']['filters']['ownership'], 2)
        self.assertEqual(scheme.groups['Apple']['filters']['ownership'], 1)

        # Test for changes to valid filter
        scheme.group_filter(group_name='Apple', filter='ownership==8')
        self.assertEqual(scheme.groups['Apple']['filters']['ownership'], 8)

        # Test for changes to an non-existing filter, NOTE: the group_filter function actually creates the group motorola
        scheme.group_filter(group_name='Motorola', filter='ownership==12')
        self.assertEqual(scheme.groups['Motorola']['filters']['ownership'], 12)

        #Test for invalid filter type
        #Test for invalid group with dictionary
        with self.assertRaises(ValueError):
            scheme.group_filter(group_name='Motorola', filter=[])

        with self.assertRaises(ValueError):
            scheme.group_filter(group_name='Ferrari', filter={'ownership': 3})

        # Try to change a filter for invalid group
        self.assertNotIn('doesnotexist', scheme.groups.keys())
        # Try to make illegal changes to filter in a valid group
        self.assertNotEqual(scheme.groups['Apple']['filters']['ownership'], 1)
        with self.assertRaises(Exception):
            scheme.group_filter(group_name='Apple', filter='ownership1')

        #The targets should be empty lists
        for key in scheme.groups['Apple']['targets']:
            self.assertEqual(scheme.groups['Apple']['targets'][key], [])

        #Test for incorrect target change
        with self.assertRaises(ValueError):
            scheme.set_targets(group_name='Apple', targets={'gender': 1234})

        #Test for setting targets to a list that wasn't given
        # with self.assertRaises(ValueError):
        #     scheme.set_targets(group_name='Apple', targets={'doesnotexist': [80, 20]})
                
        #Set valid targets
        valid_targets={
            'gender': [50, 50],
            'column1c': [20, 18, 25, 21, 16],
            'q04': [20, 55, 12.5, 12.5],
            'sta_wo': [50, 50],
            'abschluss': [60, 40],
            'q06': [20, 20, 20, 20, 20]
        }

        scheme.set_targets(group_name='Apple', targets=valid_targets)

        #Test that only the most recently set targets are still in the scheme
        self.assertNotIn('doesnotexist', scheme.groups['Apple']['targets'].keys())

        #Test that the targets were applied to the lists corrected
        for key in scheme.groups['Apple']['targets']:
            self.assertEqual(scheme.groups['Apple']['targets'][key], valid_targets[key])
        
        #add group_targets
        scheme.group_targets(
            {
                "Apple": 30,
                "Samsung": 40,
                "Motorola": 30
            }
        )
        
        self.assertItemsEqual(scheme._group_targets.keys(), ['Motorola', 'Apple', 'Samsung'])
        self.assertItemsEqual(scheme._group_targets.values(), [0.3, 0.3, 0.4])
예제 #2
0
    def test_groups(self):
        scheme = Rim('digital')
        self.assertIsInstance(scheme.groups, dict)
        self.assertIsNone(scheme.groups['__default_group_name__']['report'])
        self.assertIsNone(scheme.groups['__default_group_name__']['filters'])

        scheme.lists = [
            'gender', 'column1c', 'q06', 'sta_wo', 'abschluss', 'q04'
        ]

        scheme.add_group(name='Apple', filter='ownership==1')
        self.assertIn('Apple', scheme.groups)
        scheme.add_group(name='Samsung', filter={'ownership': 2})
        self.assertIn('Samsung', scheme.groups)

        # Try an invalid filter
        # It should not contain any filters since it was called incorrectly
        with self.assertRaises(Exception):
            scheme.add_group(name='Motorola', filter='ownership3')

        # Check to see if the available methods to add filter are equal
        self.assertEqual(scheme.groups['Samsung']['filters']['ownership'], 2)
        self.assertEqual(scheme.groups['Apple']['filters']['ownership'], 1)

        # Test for changes to valid filter
        scheme.group_filter(group_name='Apple', filter='ownership==8')
        self.assertEqual(scheme.groups['Apple']['filters']['ownership'], 8)

        # Test for changes to an non-existing filter, NOTE: the group_filter function actually creates the group motorola
        scheme.group_filter(group_name='Motorola', filter='ownership==12')
        self.assertEqual(scheme.groups['Motorola']['filters']['ownership'], 12)

        #Test for invalid filter type
        #Test for invalid group with dictionary
        with self.assertRaises(ValueError):
            scheme.group_filter(group_name='Motorola', filter=[])

        with self.assertRaises(ValueError):
            scheme.group_filter(group_name='Ferrari', filter={'ownership': 3})

        # Try to change a filter for invalid group
        self.assertNotIn('doesnotexist', scheme.groups.keys())
        # Try to make illegal changes to filter in a valid group
        self.assertNotEqual(scheme.groups['Apple']['filters']['ownership'], 1)
        with self.assertRaises(Exception):
            scheme.group_filter(group_name='Apple', filter='ownership1')

        #The targets should be empty lists
        for key in scheme.groups['Apple']['targets']:
            self.assertEqual(scheme.groups['Apple']['targets'][key], [])

        #Test for incorrect target change
        with self.assertRaises(ValueError):
            scheme.set_targets(group_name='Apple', targets={'gender': 1234})

        #Test for setting targets to a list that wasn't given
        # with self.assertRaises(ValueError):
        #     scheme.set_targets(group_name='Apple', targets={'doesnotexist': [80, 20]})

        #Set valid targets
        valid_targets = {
            'gender': [50, 50],
            'column1c': [20, 18, 25, 21, 16],
            'q04': [20, 55, 12.5, 12.5],
            'sta_wo': [50, 50],
            'abschluss': [60, 40],
            'q06': [20, 20, 20, 20, 20]
        }

        scheme.set_targets(group_name='Apple', targets=valid_targets)

        #Test that only the most recently set targets are still in the scheme
        self.assertNotIn('doesnotexist',
                         scheme.groups['Apple']['targets'].keys())

        #Test that the targets were applied to the lists corrected
        for key in scheme.groups['Apple']['targets']:
            self.assertEqual(scheme.groups['Apple']['targets'][key],
                             valid_targets[key])

        #add group_targets
        scheme.group_targets({"Apple": 30, "Samsung": 40, "Motorola": 30})

        self.assertItemsEqual(scheme._group_targets.keys(),
                              ['Motorola', 'Apple', 'Samsung'])
        self.assertItemsEqual(scheme._group_targets.values(), [0.3, 0.3, 0.4])