예제 #1
0
 def setUp(self):
     super().setUp()
     self.base_data = BaseData()
     filepath = os.path.realpath(__file__).replace(
         'tests/data_scraper_tests/base.py', ''
     )
     self.photo_path = filepath + 'yvih/static/member_photos/test'
     # self.cache_path = filepath + 'data_scraper/cache'
     self.member = models.Member.query.get(1)
예제 #2
0
class BaseDataTestCase(BaseTestCase):
    def setUp(self):
        super().setUp()
        self.base_data = BaseData()
        filepath = os.path.realpath(__file__).replace(
            'tests/data_scraper_tests/base.py', ''
        )
        self.photo_path = filepath + 'yvih/static/member_photos/test'
        # self.cache_path = filepath + 'data_scraper/cache'
        self.member = models.Member.query.get(1)

    def tearDown(self):
        # if os.path.isdir(self.photo_path):
        #     shutil.rmtree(self.photo_path)
        # if os.path.isdir(self.cache_path):
        #     shutil.rmtree(self.cache_path)
        super().tearDown()

    def test_get_name(self):
        self.assertTrue(
            isinstance(self.base_data.getName('Hammy', 'Goonan'), dict)
        )
        with self.assertRaises(ValueError):
            self.base_data.getName('Hammy Goonan')
        with self.assertRaises(ValueError):
            self.base_data.getName(['Hammy', 'The Boss', 'Goonan'])
        with self.assertRaises(ValueError):
            self.base_data.getName('Hammy', 'The Boss', 'Goonan')

    def test_get_role(self):
        self.assertTrue(
            isinstance(self.base_data.getRole('This is a role'), str)
        )
        with self.assertRaises(TypeError):
            self.base_data.getRole(1)
        # @ todo BeautifulSoup mocked response ?

    def test_get_address(self):
        address_type = models.AddressType.query.get(1)
        address = {'line1': 'PO Box 42', 'suburb': 'Melbourne', 'pcode': 3000,
                   'state': 'Vic', 'member': self.member,
                   'address_type': address_type}
        self.assertTrue(
            isinstance(self.base_data.getAddress(**address), models.Address)
        )
        address['address_type'] = 2
        self.assertTrue(
            isinstance(self.base_data.getAddress(**address), models.Address)
        )
        address['address_type'] = 'Postal'
        with self.assertRaises(TypeError):
            self.base_data.getAddress(**address)
        address['member'] = 2
        address['address_type'] = 4
        with self.assertRaises(TypeError):
            self.base_data.getAddress(**address)

    def test_get_link(self):
        link = 'http://httpbin.org/'
        link_type = 'twitter'
        self.assertTrue(
            isinstance(self.base_data.getLink(link, link_type, self.member),
                       models.Link)
        )
        with self.assertRaises(ValueError):
            self.base_data.getLink(link, 'wrong type', self.member)
        with self.assertRaises(ValueError):
            self.base_data.getLink('bin.org', link_type, self.member)
        with self.assertRaises(TypeError):
            self.base_data.getLink(link, link_type, 'member')

    def test_get_email(self):
        email = '*****@*****.**'
        self.assertTrue(
            isinstance(
                self.base_data.getEmail(email, self.member), models.Email
            )
        )
        with self.assertRaises(ValueError):
            self.base_data.getEmail('not an email', self.member)
        with self.assertRaises(TypeError):
            self.base_data.getEmail(email, 'not an member')

    def test_get_phone_number(self):
        number = '03 9876 2384'
        number_type = 'electoral fax'
        self.assertTrue(
            isinstance(
                self.base_data.getPhoneNumber(
                    number, number_type, self.member
                ),
                models.PhoneNumber
            )
        )
        with self.assertRaises(ValueError):
            self.base_data.getPhoneNumber(98765, number_type, self.member)
        with self.assertRaises(ValueError):
            self.base_data.getPhoneNumber(number, 'test', self.member)
        with self.assertRaises(TypeError):
            self.base_data.getPhoneNumber(number, number_type, 'test')

    def test_get_party(self):
        party = "Australian Greens"
        self.assertTrue(
            isinstance(self.base_data.getParty(party),  models.Party)
        )
        with self.assertRaises(ValueError):
            self.base_data.getParty('Mad Hatters')

    def test_get_electorate(self):
        chamber = models.Chamber.query.get(2)
        self.assertTrue(
            isinstance(self.base_data.getElectorate('Test Electorate', 1),
                       models.Electorate)
        )
        self.assertTrue(
            isinstance(self.base_data.getElectorate('New Electorate', 1),
                       models.Electorate)
        )
        self.assertTrue(
            isinstance(self.base_data.getElectorate('Test Electorate',
                                                    chamber),
                       models.Electorate)
        )
        self.assertTrue(
            isinstance(self.base_data.getElectorate('New Electorate', chamber),
                       models.Electorate)
        )
        with self.assertRaises(ValueError):
            self.base_data.getElectorate('New Electorate', 99)
        with self.assertRaises(ValueError):
            self.base_data.getElectorate('New Electorate', 'test')

    def test_get_photo(self):
        with patch.object(requests, 'get') as get_mock:
            get_mock.return_value = mock_response = Mock()
            mock_response.content = 'file_content'.encode('utf-8')
            mock_response.status_code = 200
            self.assertTrue(isinstance(
                self.base_data.getPhoto(
                    'http://httpbin.org/', 'test.jpg', 'test'
                ), str)
            )
            self.assertTrue(
                os.path.isfile(self.photo_path + '/test.jpg')
            )
        with patch.object(requests, 'get') as get_mock:
            get_mock.return_value = mock_response = Mock()
            mock_response.content = 'file_content'.encode('utf-8')
            mock_response.status_code = 500
            with self.assertRaises(Exception):
                self.base_data.getPhoto('http://httpbin.org/', 'test.jpg',
                                        'test')