fga-gpp-mds/2017.2-QueroCultura

View on GitHub
quero_cultura/tests.py

Summary

Maintainability
F
1 wk
Test Coverage
from datetime import datetime
from .api_connections import RequestMarkersRawData
from .api_connections import choose_select
from .api_connections import get_marker_action
from .api_connections import get_attribute
from .api_connections import get_date
from .api_connections import request_subsite_url
from .api_connections import filter_data
from .views import get_time_now
from .views import get_last_hour_markers
from .views import get_last_day_markers
from .views import get_last_minutes_markers
from .views import get_most_recent_markers
from .api_connections import get_marker_address
from .api_connections import get_location
from quero_cultura.views import ParserYAML
import requests_mock
import json


SPACE_SELECT = 'id, name, location, singleUrl, subsite, createTimestamp, updateTimestamp'
EVENT_SELECT = 'id, name, occurrences.{space.{location}}, singleUrl, subsite, createTimestamp, updateTimestamp'
AGENT_SELECT = 'id, name, location, singleUrl, subsite, createTimestamp, updateTimestamp'
PROJECT_SELECT = 'id, name, owner.location, singleUrl, subsite, createTimestamp, updateTimestamp'


class TestGetMostRecentMarkers(object):
    def test_get_most_recent_markers(self):
        last = get_most_recent_markers()
        assert last == []
        

class TestGetLastMinutesMarkers(object):
    @requests_mock.Mocker(kw='mock')
    def test_get_last_minutes_markers(self, **kwargs):
        parser_yaml = ParserYAML()
        urls = parser_yaml.get_multi_instances_urls

        result = []

        for url in urls:
            kwargs['mock'].get(url + "agent/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "event/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "project/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "space/find/", text=json.dumps(result))
            
        last = get_last_minutes_markers()
        assert last == []


class TestGetLastDayMarkers(object):
    @requests_mock.Mocker(kw='mock')
    def test_get_last_day_markers(self, **kwargs):
        parser_yaml = ParserYAML()
        urls = parser_yaml.get_multi_instances_urls

        result = []

        for url in urls:
            kwargs['mock'].get(url + "agent/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "event/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "project/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "space/find/", text=json.dumps(result))
            
        last = get_last_day_markers()
        assert last == []


class TestGetLastHourMarkers(object):
    @requests_mock.Mocker(kw='mock')
    def test_get_last_hour_markers(self, **kwargs):
        parser_yaml = ParserYAML()
        urls = parser_yaml.get_multi_instances_urls

        result = []

        for url in urls:
            kwargs['mock'].get(url + "agent/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "event/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "project/find/", text=json.dumps(result))
            kwargs['mock'].get(url + "space/find/", text=json.dumps(result))
            
        last = get_last_hour_markers()
        assert last == []


class TestRequestMarkerRawData(object):

    @requests_mock.Mocker(kw='mock')
    def test_request_marker_raw_data(self, **kwargs):
        url = "http://mapas.cultura.gov.br/api/"
        marker = 'agent'
        result = [{"id": 1, "date": "2012-01-01 00:00:00.000000",
                   "name": "larissa", "useRegistrations": "FGA"}]

        kwargs['mock'].get(url + marker + "/find/", text=json.dumps(result))

        current_time = datetime.now().__str__()
        raw_data = RequestMarkersRawData(current_time, url, marker)
        assert raw_data.response.status_code == 200
        assert raw_data.data == result
        assert raw_data.data_length == 1


class TestChooseSelect(object):

    def test_choose_select(self):
        select = choose_select('event')
        assert select == EVENT_SELECT
        select = choose_select('agent')
        assert select == AGENT_SELECT
        select = choose_select('project')
        assert select == PROJECT_SELECT
        select = choose_select('space')
        assert select == SPACE_SELECT


class TestMarkerAction(object):

    def test_get_marker_action(self):
        action = get_marker_action('2010', None)
        assert action['type'] == 'Criação'
        assert action['time'] == '2010'
        action = get_marker_action(None, '2010')
        assert action['type'] == 'Atualização'
        assert action['time'] == '2010'


class TestGetAtributte(object):

    def test_get_atributte(self):
        atributte = get_attribute({'Name': 'Caio'}, 'Name')
        assert atributte == 'Caio'
        atributte = get_attribute({'Name': 'Caio'}, 'Idade')
        assert atributte == ''


class TestGetDate(object):

    def test_get_date(self):
        date = get_date({'createTimestamp': {'date': '2010'}},
                        'createTimestamp')
        assert date == '2010'
        date = get_date({'createTimestamp': None}, 'createTimestamp')
        assert date == None


class TestRequestSubSite(object):

    @requests_mock.Mocker(kw='mock')
    def test_request_subsite(self, **kwargs):

        url = "http://mapas.cultura.gov.br/"
        inst_id = 1

        result = [{'url': 'mapas.cultura.gov.br/'}]

        kwargs['mock'].get(url + "/api/subsite/find", text=json.dumps(result))
        resp = request_subsite_url(inst_id, url)
        assert resp == url


class TestMarkerAddress(object):

    @requests_mock.Mocker(kw='mock')
    def test_get_marker_address(self, **kwargs):
        marker = {}
        url = "http://nominatim.openstreetmap.org/reverse?"
        location = {'latitude': '10', 'longitude': '10'}

        result = {'address': {'city': 'brasilia', 'state': 'Distrito'}}

        kwargs['mock'].get(url + "lat=10&lon=10&format=json",
                           text=json.dumps(result))
        marker['city'], marker['state'] = get_marker_address(location)
        assert marker['city'] == 'brasilia'
        assert marker['state'] == 'Distrito'

    @requests_mock.Mocker(kw='mock')
    def test_get_marker(self, **kwargs):
        marker = {}
        url = "http://nominatim.openstreetmap.org/reverse?"
        location = {'latitude': '10', 'longitude': '10'}
        result = {'address': {'state': 'Distrito', 'town': 'other'}}

        kwargs['mock'].get(url + "lat=10&lon=10&format=json",
                           text=json.dumps(result))
        marker['city'], marker['state'] = get_marker_address(location)

        assert marker['city'] == 'other'
        assert marker['state'] == 'Distrito'

    @requests_mock.Mocker(kw='mock')
    def test_get_marker_empty(self, **kwargs):
        marker = {}
        url = "http://nominatim.openstreetmap.org/reverse?"
        location = {'latitude': '10', 'longitude': '10'}
        result = {'address': {}}

        kwargs['mock'].get(url + "lat=10&lon=10&format=json",
                           text=json.dumps(result))
        marker['city'], marker['state'] = get_marker_address(location)

        assert marker['city'] == ''
        assert marker['state'] == ''

    def test_get_marker_none(self):
        location = None
        marker = {}
        marker['city'], marker['state'] = get_marker_address(location)

        assert marker['city'] == None
        assert marker['state'] == None


class TestMarkerLocation(object):

    @requests_mock.Mocker(kw='mock')
    def test_get_marker(self, **kwargs):
        marker = 'project'
        result = {'owner': {'location': {'latitude': '10', 'longitude': '10'}}}

        resp = get_location(result, marker)

        assert resp == {'latitude': '10', 'longitude': '10'}

        marker = 'project'
        result = {'owner': None}

        resp = get_location(result, marker)

        assert resp == {'latitude': '0', 'longitude': '0'}

        marker = 'event'
        result = {'occurrences': {}}

        resp = get_location(result, marker)

        assert resp == {'latitude': '0', 'longitude': '0'}

        marker = 'agent'
        result = {'location': {'latitude': '10', 'longitude': '10'}}

        resp = get_location(result, marker)

        assert resp == {'latitude': '10', 'longitude': '10'}

        marker = 'agent'
        result = {}

        resp = get_location(result, marker)

        assert resp == {'latitude': '0', 'longitude': '0'}


class TestGetTimeNow(object):

    def test_get_time_now(self):
        time_now = get_time_now()
        assert time_now.date() == datetime.now().date()


class TestFilterData(object):

    def test_filter_data(self):
        marker = {'id': 123, 'name': 'Caio', 'location': {'latitude': '0', 'longitude': '0'},
                  'singleUrl': '', 'subsite': None, 'createTimestamp': None, 'updateTimestamp': None}
        test_marker = filter_data(marker, 'agent')
        assert test_marker['name'] == 'Caio'