def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .predictive_arrivals(port_id=51)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/predictive-arrivals/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('portid', '51'), ('protocol', 'jsono')]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].imo.value, 8817564)
        self.assertEqual(request.models[0].ship_id.value, 213546)
        self.assertEqual(request.models[0].mmsi.value, 240708000)
        self.assertEqual(request.models[0].ship_class.value, 'HANDYSIZE')
        self.assertEqual(request.models[0].ship_name.value, 'AEGEAN III')
        self.assertEqual(request.models[0].market.value, 'WET BULK')

        self.assertEqual(request.models[0].from_port_id.value, 5)
        self.assertEqual(request.models[0].from_port.value, 'ELEFSIS')
        self.assertEqual(request.models[0].next_port_id.value, 51)
        self.assertEqual(request.models[0].next_port.value, 'PATRA')
        self.assertEqual(request.models[0].next_area.value, "EMED")
        self.assertEqual(request.models[0].next_port_prob.value, 0.786)
        self.assertEqual(request.models[0].next_area_prob.value, 1.000)
    def test_meta_json(self):
        request = Client(
            self._api_key,
            fake_response_path=self.fake_ok_response_path_json)\
            .port_distances_and_routes(**self._request_params)

        self.assertEqual(request.meta, self._meta_data)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .vessel_historical_track(period='daily',
                                     days=3,
                                     mmsi=241486000)

        query = [tuple(q.split(':')) for q in
                 sorted(request.api_reguest.url.split(
                     'https://services.marinetraffic.com/api/exportvesseltrack/_api_key_/'
                 )[1].split('/'))]

        test_query = [
            ('days', '3'), ('mmsi', '241486000'), ('msgtype', 'simple'),
            ('period', 'daily'), ('protocol', 'jsono'), ('v', '2')
        ]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].mmsi.value, 241486000)
        self.assertEqual(request.models[0].status.value, 0)
        self.assertEqual(request.models[0].speed.value, 146)
        self.assertEqual(request.models[0].latitude.value, 34.485870)
        self.assertEqual(request.models[0].longitude.value, 11.904260)
        self.assertEqual(request.models[0].course.value, 189)
        self.assertEqual(request.models[0].heading.value, 190)
        self.assertEqual(request.models[0].timestamp.value, datetime(2017, 7, 12, 10, 6, 0))
        self.assertEqual(request.models[0].ship_id.value, 4910653)
        self.assertEqual(request.models[0].wind_angle.value, 340)
        self.assertEqual(request.models[0].wind_speed.value, 18)
        self.assertEqual(request.models[0].wind_temp.value, 12)
    def test_set_parameters(self):
        request = Client(
            self._api_key,
            fake_response_path=self.fake_ok_response_path)\
            .port_distances_and_routes(*['foo', 'bar'], **self._request_params)

        self.assertEqual(request.api_reguest._timeout, 10)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .vessel_events(mmsi=355906000,
                           event_type=19,
                           timespan=160)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/vesselevents/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('event_type', '19'), ('mmsi', '355906000'),
                      ('msgtype', 'simple'), ('protocol', 'jsono'),
                      ('timespan', '160')]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].mmsi.value, 355906000)
        self.assertEqual(request.models[0].ship_name.value, "MSC OSCAR")
        self.assertEqual(request.models[0].timestamp.value,
                         datetime(2016, 4, 10, 12, 2, 0))
        self.assertEqual(request.models[0].event_id.value, 2)
        self.assertEqual(request.models[0].event_name.value,
                         'INTERMEDIATE_DAILY_POS')
        self.assertEqual(request.models[0].event_content.value,
                         'At Lat:35.9598 / Lon:-6.02252')
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .search_vessel(imo=9375783)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/shipsearch/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('imo', '9375783'), ('protocol', 'jsono')]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].id.value, 280171)
        self.assertEqual(request.models[0].name.value, 'FOUR SMILE')
        self.assertEqual(request.models[0].mmsi.value, 247271800)
        self.assertEqual(request.models[0].imo.value, 9189146)
        self.assertEqual(request.models[0].call_sign.value, 'IBPQ')
        self.assertEqual(request.models[0].type_name.value,
                         'Oil Products Tanker')
        self.assertEqual(request.models[0].dwt.value, 160573)
        self.assertEqual(request.models[0].flag.value, 'IT')
        self.assertEqual(request.models[0].country.value, 'Italy')
        self.assertEqual(request.models[0].build_year.value, 2001)
        self.assertEqual(
            request.models[0].details_page_url.value,
            'https://www.marinetraffic.com/en/ais/details/ships/shipid:280171/mmsi:247271800/vessel:280171'
        )
    def test_meta_xml_with_meta(self):
        request = Client(
            self._api_key,
            fake_response_path=self.fake_ok_response_path_xml_with_meta)\
            .port_distances_and_routes(protocol='xml', **self._request_params)

        self.assertEqual(request.meta, self._meta_data)
예제 #8
0
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .predictive_destinations(imo=8105088,
                                     fromportid=1)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/predictive-destination-areas/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('fromportid', '1'), ('imo', '8105088'),
                      ('protocol', 'jsono')]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].imo.value, 8105088)
        self.assertEqual(request.models[0].ship_id.value, 214973)
        self.assertEqual(request.models[0].mmsi.value, 241324000)
        self.assertEqual(request.models[0].ship_id.value, 214973)
        self.assertEqual(request.models[0].ship_class.value, 'HANDYSIZE')
        self.assertEqual(request.models[0].manager.value, 'SEKA 02 MARITIME')
        self.assertEqual(request.models[0].owner.value, 'SEKA 02 MARITIME')
        self.assertEqual(request.models[0].from_port_id.value, 1)
        self.assertEqual(request.models[0].from_port.value, 'PIRAEUS')

        self.assertEqual(request.models[0].next_port_1_id.value, 812)
        self.assertEqual(request.models[0].next_port_1.value, 'KALI LIMENES')
        self.assertEqual(request.models[0].next_port_1_prob.value, 0.563)
        self.assertEqual(request.models[0].next_area_1.value, 'EMED')
        self.assertEqual(request.models[0].next_area_1_prob.value, 0.875)

        self.assertEqual(request.models[0].next_port_2_id.value, 29)
        self.assertEqual(request.models[0].next_port_2.value,
                         'AGIOI THEODOROI')
        self.assertEqual(request.models[0].next_port_2_prob.value, 0.250)
        self.assertEqual(request.models[0].next_area_2.value, 'EMED')
        self.assertEqual(request.models[0].next_area_2_prob.value, 0.875)

        self.assertEqual(request.models[0].next_port_3_id.value, 17)
        self.assertEqual(request.models[0].next_port_3.value, 'CORINTH CANAL')
        self.assertEqual(request.models[0].next_port_3_prob.value, 0.063)
        self.assertEqual(request.models[0].next_area_3.value, 'EMED')
        self.assertEqual(request.models[0].next_area_3_prob.value, 0.875)

        self.assertEqual(request.models[0].next_port_4_id.value, 2507)
        self.assertEqual(request.models[0].next_port_4.value, 'TRIPOLI')
        self.assertEqual(request.models[0].next_port_4_prob.value, 0.063)
        self.assertEqual(request.models[0].next_area_4.value, 'WMED')
        self.assertEqual(request.models[0].next_area_4_prob.value, 0.063)

        self.assertEqual(request.models[0].next_port_5_id.value, 1688)
        self.assertEqual(request.models[0].next_port_5.value, 'TUZLA')
        self.assertEqual(request.models[0].next_port_5_prob.value, 0.063)
        self.assertEqual(request.models[0].next_area_5.value, 'BSEA')
        self.assertEqual(request.models[0].next_area_5_prob.value, 0.063)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .expected_arrivals(timespan=2,
                               country='US',
                               dwt_min=10000,
                               dwt_max=160000,
                               shiptype=7)

        query = [tuple(q.split(':')) for q in
                 sorted(request.api_reguest.url.split(
                     'https://services.marinetraffic.com/api/expectedarrivals/_api_key_/'
                 )[1].split('/'))]

        test_query = [
            ('country', 'US'), ('dwt_max', '160000'), ('dwt_min', '10000'),
            ('protocol', 'jsono'), ('shiptype', '7'), ('timespan', '2'),
            ('v', '3')
        ]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].imo.value, 7350325)
        self.assertEqual(request.models[0].mmsi.value, 239308000)
        self.assertEqual(request.models[0].ship_name.value, 'IONIS')
        self.assertEqual(request.models[0].type_name.value, 'Ro-Ro/Passenger Ship')
        self.assertEqual(request.models[0].ship_type.value, 71)
        self.assertEqual(request.models[0].call_sign.value, 'SVKU')
        self.assertEqual(request.models[0].flag.value, 'GR')
        self.assertEqual(request.models[0].length.value, 96)
        self.assertEqual(request.models[0].width.value, 17)
        self.assertEqual(request.models[0].draught.value, 44)
        self.assertEqual(request.models[0].grt.value, 2604)
        self.assertEqual(request.models[0].dwt.value, 880)
        self.assertEqual(request.models[0].year_built.value, 1977)
        self.assertEqual(request.models[0].latitude.value, 37.914780)
        self.assertEqual(request.models[0].longitude.value, 23.604830)
        self.assertEqual(request.models[0].speed.value, 164)
        self.assertEqual(request.models[0].course.value, 63)
        self.assertEqual(request.models[0].status.value, 0)
        self.assertEqual(request.models[0].eta.value, datetime(2016, 10, 20, 10, 36, 0))
        self.assertEqual(request.models[0].eta_calc.value, '')
        self.assertEqual(request.models[0].eta_updated.value, '')
        self.assertEqual(request.models[0].last_port_id.value, 6)
        self.assertEqual(request.models[0].last_port.value, 'AEGINA')
        self.assertEqual(request.models[0].last_port_unlocode.value, 'GRAEG')
        self.assertEqual(request.models[0].last_port_country.value, 'GR')
        self.assertEqual(request.models[0].last_port_time.value, datetime(2016, 10, 19, 13, 6, 0))
        self.assertEqual(request.models[0].port_id.value, 0)
        self.assertEqual(request.models[0].port_unlocode.value, '')
        self.assertEqual(request.models[0].current_port.value, '')
        self.assertEqual(request.models[0].current_port_country.value, '')
        self.assertEqual(request.models[0].next_port_id.value, 1)
        self.assertEqual(request.models[0].next_port_unlocode.value, 'GRPIR')
        self.assertEqual(request.models[0].next_port_name.value, 'PIRAEUS')
        self.assertEqual(request.models[0].next_port_country.value, 'GR')
        self.assertEqual(request.models[0].timestamp.value, datetime(2016, 10, 19, 14, 3, 8))
    def test_error_response_xml(self):
        with self.assertRaises(Exception) as context:
            Client(
                self._api_key,
                fake_response_path=self.fake_error_response_path_xml)\
                .port_distances_and_routes(protocol='xml', **self._request_params)

        self.assertTrue(
            'Request errors: code 12: TEST ERROR' in str(context.exception))
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .vessel_photos(vessel_id=310627000)

        url = 'https://services.marinetraffic.com/api/exportvesselphoto/_api_key_/' \
              'vessel_id:310627000'
        self.assertEqual(request.api_reguest.url, url)

        self.assertEqual(request.models[0].url.value,
                         'https://services.marinetraffic.com/photos/show/864354')
예제 #12
0
    def setUp(self):
        self._api_key = '_api_key_'
        self.fake_ok_response_path_json = os.path.join(
            os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
            'tests', 'responses', 'ps01_response.json')

        self._request = Client(self._api_key,
                               fake_response_path=self.fake_ok_response_path_json) \
            .vessel_historical_track(period='daily',
                                     days=3,
                                     mmsi=241486000)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .single_vessel_positions(timespan=20,
                                     mmsi=310627000)

        query = [tuple(q.split(':')) for q in
                 sorted(request.api_reguest.url.split(
                     'https://services.marinetraffic.com/api/exportvessel/_api_key_/'
                 )[1].split('/'))]

        test_query = [
            ('mmsi', '310627000'), ('msgtype', 'simple'), ('protocol', 'jsono'),
            ('timespan', '20'), ('v', '5')
        ]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].mmsi.value, 205623000)
        self.assertEqual(request.models[0].imo.value, 9549645)
        self.assertEqual(request.models[0].latitude.value, 37.24538)
        self.assertEqual(request.models[0].longitude.value, 25.590981)
        self.assertEqual(request.models[0].speed.value, 65)
        self.assertEqual(request.models[0].heading.value, 250)
        self.assertEqual(request.models[0].course.value, 288)
        self.assertEqual(request.models[0].status.value, 0)
        self.assertEqual(request.models[0].timestamp.value, datetime(2016, 4, 18, 19, 21, 0))
        self.assertEqual(request.models[0].dsrc.value, 'SAT')
        self.assertEqual(request.models[0].ship_name.value, 'MALACHITE')
        self.assertEqual(request.models[0].ship_type.value, 70)
        self.assertEqual(request.models[0].call_sign.value, 'ONHL')
        self.assertEqual(request.models[0].flag.value, 'BE')
        self.assertEqual(request.models[0].length.value, 90)
        self.assertEqual(request.models[0].width.value, 14)
        self.assertEqual(request.models[0].grt.value, 3517)
        self.assertEqual(request.models[0].dwt.value, 5000)
        self.assertEqual(request.models[0].year_built.value, 2012)
        self.assertEqual(request.models[0].type_name.value, 'Passengers Ship')
        self.assertEqual(request.models[0].ais_type_summary.value, 'Passenger')
        self.assertEqual(request.models[0].current_port.value, '')
        self.assertEqual(request.models[0].current_port_id.value, 0)
        self.assertEqual(request.models[0].current_port_unlocode.value, '')
        self.assertEqual(request.models[0].last_port.value, 'FREMANTLE')
        self.assertEqual(request.models[0].last_port_time.value, datetime(2016, 4, 16, 18, 26, 0))
        self.assertEqual(request.models[0].destination.value, 'DERINCE')
        self.assertEqual(request.models[0].eta.value, datetime(2017, 4, 20, 14, 0, 0))
        self.assertEqual(request.models[0].draught.value, 50)
        self.assertEqual(request.models[0].last_port_id.value, 768)
        self.assertEqual(request.models[0].last_port_unlocode.value, 'AUFRE')
        self.assertEqual(request.models[0].next_port_id.value, 890)
        self.assertEqual(request.models[0].next_port_unlocode.value, 'AUADL')
        self.assertEqual(request.models[0].next_port_name.value, 'ADELAIDE')
        self.assertEqual(request.models[0].next_port_country.value, 'AU')
        self.assertEqual(request.models[0].eta_calc.value, datetime(2017, 5, 20, 14, 0, 0))
    def test_ok_response_csv(self):
        request = Client(
            self._api_key,
            fake_response_path=self.fake_ok_response_path_csv)\
            .port_distances_and_routes(protocol='csv', **self._request_params)

        self.assertEqual(request.formatted_data, self._test_response)

        self.assertEqual(request.models[0].distance.value, 7891)
        self.assertFalse(request.models[0].panama.value)
        self.assertTrue(request.models[0].suez.value)
        self.assertEqual(request.models[0].final_path.value, self._final_path)
    def test_prepare_url(self):
        request = Client(
            self._api_key,
            fake_response_path=self.fake_ok_response_path)\
            .port_distances_and_routes(**self._request_params)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(self._base_url)[1].split('/'))
        ]

        test_query = [('includealternatives', '1'), ('includeinland', '0'),
                      ('port_start_id', '1'), ('port_target_id', '10'),
                      ('protocol', 'jsono')]

        self.assertEqual(query, test_query)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .port_distances_and_routes()

        url = 'https://services.marinetraffic.com/api/exportroutes/_api_key_/' \
              'protocol:jsono'
        self.assertEqual(request.api_reguest.url, url)

        self.assertEqual(request.models[0].distance.value, 7891)
        self.assertFalse(request.models[0].panama.value)
        self.assertTrue(request.models[0].suez.value)
        self.assertEqual(request.models[0].final_path.value,
                         [(23.5935, 37.9475), (23.5997, 37.9455),
                          (23.605, 37.9413), (122.867, 31.0829),
                          (122.308, 31.1024), (122.093, 31.228)])
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .eta_to_port(portid=2036,
                         shipid=292,
                         speed_calc=18.8)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/etatoport/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('portid', '2036'), ('protocol', 'jsono'),
                      ('shipid', '292'), ('speed_calc', '18.8')]

        self.assertEqual(query, test_query)

        print(type(request.models[0].last_port_time.value))

        self.assertEqual(request.models[0].ship_id.value, 292)
        self.assertEqual(request.models[0].mmsi.value, 228313800)
        self.assertEqual(request.models[0].imo.value, 9450600)
        self.assertEqual(request.models[0].last_port_id.value, 166)
        self.assertEqual(request.models[0].last_port.value, "CAPE TOWN")
        self.assertEqual(request.models[0].last_port_unlocode.value, "ZACPT")
        self.assertEqual(request.models[0].last_port_time.value,
                         datetime(2018, 12, 8, 8, 13, 1))
        self.assertEqual(request.models[0].next_port_name.value, "ROTTERDAM")
        self.assertEqual(request.models[0].next_port_unlocode.value, "NLRTM")
        self.assertEqual(request.models[0].eta_calc.value,
                         datetime(2018, 12, 26, 11, 48, 2))
        self.assertEqual(request.models[0].distance_travelled.value, 200)
        self.assertEqual(request.models[0].distance_to_go.value, 100)
        self.assertEqual(request.models[0].speed.value, 50)
        self.assertEqual(request.models[0].draught.value, 1234)
        self.assertEqual(request.models[0].draught_max.value, 4321)
        self.assertEqual(request.models[0].load_status_name.value, "test1")
        self.assertEqual(request.models[0].route.value, "test2")
        self.assertEqual(request.models[0].etd_calc.value,
                         datetime(2018, 12, 26, 11, 48, 2))
        self.assertEqual(request.models[0].time_anch.value, 10.10)
        self.assertEqual(request.models[0].time_port.value, 20.20)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .vessel_particulars(imo=9375783)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/vesselmasterdata/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('imo', '9375783'), ('protocol', 'jsono'), ('v', '3')]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].mmsi.value, 304932000)
        self.assertEqual(request.models[0].imo.value, 9375783)
        self.assertEqual(request.models[0].name.value, 'STAPELMOOR')
        self.assertEqual(request.models[0].build_place.value, '')
        self.assertEqual(request.models[0].build_year.value, 2006)
        self.assertEqual(request.models[0].breadth_extreme.value, 12.4)
        self.assertEqual(request.models[0].summer_dwt.value, 2930)
        self.assertEqual(request.models[0].displacement_summer.value, 0)
        self.assertEqual(request.models[0].call_sign.value, 'V2BU8')
        self.assertEqual(request.models[0].flag.value, 'AG')
        self.assertEqual(request.models[0].draught.value, 4.36)
        self.assertEqual(request.models[0].overall_length.value, 88.53)
        self.assertEqual(request.models[0].fuel_consumption.value, '')
        self.assertEqual(request.models[0].max_speed.value, 0)
        self.assertEqual(request.models[0].condition_speed.value, 10.5)
        self.assertEqual(request.models[0].wet_cargo_capacity.value, 0)
        self.assertEqual(request.models[0].owner.value, '')
        self.assertEqual(request.models[0].manager.value, '')
        self.assertEqual(request.models[0].vessel_type.value, 'GENERAL CARGO')
        self.assertEqual(request.models[0].manager_owner.value,
                         'BOJEN REEDEREI')
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .port_congestion(year=2018,
                             market='wet bulk',
                             ship_class='handysize',
                             week=15,
                             port_id=1)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/port-congestion/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('market', 'wet bulk'), ('portid', '1'),
                      ('protocol', 'jsono'), ('shipclass', 'handysize'),
                      ('week', '15'), ('year', '2018')]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].port_id.value, 1)
        self.assertEqual(request.models[0].year.value, 2018)
        self.assertEqual(request.models[0].week.value, 15)
        self.assertEqual(request.models[0].market.value, 'WET BULK')
        self.assertEqual(request.models[0].ship_class.value, 'HANDYSIZE')
        self.assertEqual(request.models[0].time_anch.value, 0.3)
        self.assertEqual(request.models[0].time_port.value, 0.7)
        self.assertEqual(request.models[0].vessels.value, 17)
        self.assertEqual(request.models[0].calls.value, 33)
        self.assertEqual(request.models[0].time_anch_stdev.value, 1.1)
        self.assertEqual(request.models[0].time_anch_diff.value, 0.1)
        self.assertEqual(request.models[0].time_anch_diff_perc.value, 50.0)
        self.assertEqual(request.models[0].time_port_stdev.value, 9.0)
        self.assertEqual(request.models[0].time_port_diff.value, 0.0)
        self.assertEqual(request.models[0].time_port_diff_perc.value, 0.0)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .port_calls(portid=1,
                        gt_min=4000,
                        dwt_min=9000,
                        timespan=60)

        query = [tuple(q.split(':')) for q in sorted(request.api_reguest.url.split(
            'https://services.marinetraffic.com/api/portcalls/_api_key_/'
        )[1].split('/'))]

        test_query = [
            ('dwt_min', '9000'), ('gt_min', '4000'), ('msgtype', 'simple'),
            ('portid', '1'), ('protocol', 'jsono'), ('timespan', '60'),
            ('v', '4')
        ]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].mmsi.value, 566312000)
        self.assertEqual(request.models[0].ship_name.value, "MARITIME KELLY ANNE")
        self.assertEqual(request.models[0].ship_id.value, 708694)
        self.assertEqual(request.models[0].local_timestamp.value, datetime(2016, 3, 3, 7, 10, 0))
        self.assertEqual(request.models[0].utc_timestamp.value, datetime(2016, 3, 3, 12, 10, 0))
        self.assertEqual(request.models[0].move_type.value, True)
        self.assertEqual(request.models[0].type_name.value, 'Container Ship')
        self.assertEqual(request.models[0].unlocode.value, 'USMSY')
        self.assertEqual(request.models[0].draught.value, 45)
        self.assertEqual(request.models[0].load_status.value, 0)
        self.assertEqual(request.models[0].port_operation.value, 0)
        self.assertEqual(request.models[0].in_transit.value, False)
        self.assertEqual(request.models[0].voyage_avg_speed.value, 57)
        self.assertEqual(request.models[0].voyage_max_speed.value, 73)
        self.assertEqual(request.models[0].voyage_idle_time.value, 0)
        self.assertEqual(request.models[0].elapsed_noanch.value, 11)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .fleet_vessel_positions(timespan=10)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/exportvessels/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('msgtype', 'simple'), ('protocol', 'jsono'),
                      ('timespan', '10'), ('v', '8')]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].mmsi.value, 304010417)
        self.assertEqual(request.models[0].imo.value, 9015462)
        self.assertEqual(request.models[0].ship_id.value, 359396)
        self.assertEqual(request.models[0].latitude.value, 47.758499)
        self.assertEqual(request.models[0].longitude.value, -5.154223)
        self.assertEqual(request.models[0].speed.value, 74)
        self.assertEqual(request.models[0].heading.value, 329)
        self.assertEqual(request.models[0].course.value, 327)
        self.assertEqual(request.models[0].status.value, 0)
        self.assertEqual(request.models[0].timestamp.value,
                         datetime(2017, 5, 19, 9, 39, 57))
        self.assertEqual(request.models[0].dsrc.value, 'TER')
        self.assertEqual(request.models[0].utc_seconds.value, 54)
        self.assertEqual(request.models[0].ship_name.value, 'DORNUM')
        self.assertEqual(request.models[0].ship_type.value, 70)
        self.assertEqual(request.models[0].call_sign.value, 'V2OZ')
        self.assertEqual(request.models[0].flag.value, 'AG')
        self.assertEqual(request.models[0].length.value, 81.7900009)
        self.assertEqual(request.models[0].width.value, 11.3000002)
        self.assertEqual(request.models[0].grt.value, 1662)
        self.assertEqual(request.models[0].dwt.value, 2369)
        self.assertEqual(request.models[0].year_built.value, 1993)
        self.assertEqual(request.models[0].rot.value, 6)
        self.assertEqual(request.models[0].type_name.value, 'General Cargo')
        self.assertEqual(request.models[0].ais_type_summary.value, 'Cargo')
        self.assertEqual(request.models[0].current_port.value, '')
        self.assertEqual(request.models[0].current_port_id.value, 0)
        self.assertEqual(request.models[0].current_port_unlocode.value, '')
        self.assertEqual(request.models[0].current_port_country.value, '')
        self.assertEqual(request.models[0].last_port.value, 'BILBAO ANCH')
        self.assertEqual(request.models[0].last_port_time.value,
                         datetime(2017, 5, 16, 15, 37, 0))
        self.assertEqual(request.models[0].destination.value, 'GREENORE')
        self.assertEqual(request.models[0].eta.value,
                         datetime(2017, 5, 20, 8, 0, 0))
        self.assertEqual(request.models[0].draught.value, 44)
        self.assertEqual(request.models[0].last_port_id.value, 20648)
        self.assertEqual(request.models[0].last_port_unlocode.value, '')
        self.assertEqual(request.models[0].last_port_country.value, 'ES')
        self.assertEqual(request.models[0].next_port_id.value, 251)
        self.assertEqual(request.models[0].next_port_unlocode.value, 'IEGRN')
        self.assertEqual(request.models[0].next_port_name.value, 'GREENORE')
        self.assertEqual(request.models[0].next_port_country.value, 'IE')
        self.assertEqual(request.models[0].eta_calc.value,
                         datetime(2017, 5, 21, 9, 55, 0))
        self.assertEqual(request.models[0].eta_updated.value,
                         datetime(2017, 5, 19, 9, 7, 0))
        self.assertEqual(request.models[0].distance_to_go.value, 407)
        self.assertEqual(request.models[0].distance_travelled.value, 364)
        self.assertEqual(request.models[0].awg_speed.value, 8.5)
        self.assertEqual(request.models[0].max_speed.value, 8.80000019)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json) \
            .berth_calls(dwt_min=2000,
                         dwt_max=70000,
                         timespan=20)

        query = [
            tuple(q.split(':')) for q in sorted(
                request.api_reguest.url.split(
                    'https://services.marinetraffic.com/api/berth-calls/_api_key_/'
                )[1].split('/'))
        ]

        test_query = [('dwt_max', '70000'), ('dwt_min', '2000'),
                      ('msgtype', 'simple'), ('protocol', 'jsono'),
                      ('timespan', '20')]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].ship_id.value, 414650)
        self.assertEqual(request.models[0].mmsi.value, 354530000)
        self.assertEqual(request.models[0].imo.value, 9349813)
        self.assertEqual(request.models[0].dock_local_time.value,
                         datetime(2018, 3, 13, 13, 50, 0))
        self.assertEqual(request.models[0].dock_utc_time.value,
                         datetime(2018, 3, 13, 11, 50, 0))
        self.assertEqual(request.models[0].dock_offset_time.value, 2.0)
        self.assertEqual(request.models[0].undock_local_time.value, '')
        self.assertEqual(request.models[0].undock_utc_time.value, '')
        self.assertEqual(request.models[0].undock_offset_time.value, 0.0)
        self.assertEqual(request.models[0].ship_name.value, 'MSC CARMEN')
        self.assertEqual(request.models[0].type_name.value, 'Container Ship')
        self.assertEqual(request.models[0].grt.value, 50963)
        self.assertEqual(request.models[0].dwt.value, 63359)
        self.assertEqual(request.models[0].flag.value, 'PA')
        self.assertEqual(request.models[0].year_built.value, 2008)
        self.assertEqual(request.models[0].berth_id.value, 6)
        self.assertEqual(request.models[0].berth_name.value,
                         'Container Terminal')
        self.assertEqual(request.models[0].terminal_id.value, 978)
        self.assertEqual(request.models[0].terminal_name.value,
                         'Container Terminal')
        self.assertEqual(request.models[0].port_name.value, 'PIRAEUS')
        self.assertEqual(request.models[0].port_id.value, 1)
        self.assertEqual(request.models[0].unlocode.value, 'GRPIR')
        self.assertEqual(request.models[0].country_code.value, None)
        self.assertEqual(request.models[0].destination_id.value, 32)
        self.assertEqual(request.models[0].destination.value, 'PAROS')
        self.assertEqual(request.models[0].arrival_local_time.value,
                         datetime(2018, 3, 13, 13, 43, 0))
        self.assertEqual(request.models[0].arrival_utc_time.value,
                         datetime(2018, 3, 13, 11, 43, 0))
        self.assertEqual(request.models[0].arrival_draught.value, 130)
        self.assertEqual(request.models[0].arrival_load_status.value, 3)
        self.assertEqual(request.models[0].distance_travelled.value, 2931)
        self.assertEqual(request.models[0].voyage_average_speed.value, 188)
        self.assertEqual(request.models[0].voyage_max_speed.value, 226)
        self.assertEqual(request.models[0].voyage_idle_time.value, 7)
        self.assertEqual(request.models[0].origin_name.value, 'ANTWERP')
        self.assertEqual(request.models[0].origin_port_id.value, 117)
        self.assertEqual(request.models[0].origin_departure_time.value,
                         datetime(2018, 3, 7, 5, 36, 0))
        self.assertEqual(request.models[0].total_voyage_time.value, 9007)
        self.assertEqual(request.models[0].departure_local_time.value, '')
        self.assertEqual(request.models[0].departure_utc_time.value, '')
        self.assertEqual(request.models[0].departure_draught.value, 0)
        self.assertEqual(request.models[0].departure_load_status.value, 0)
        self.assertEqual(request.models[0].port_operation.value, 0)
        self.assertEqual(request.models[0].time_at_berth.value, 0)
        self.assertEqual(request.models[0].time_at_port.value, 0)
    def test_ok_response_json(self):
        request = Client(self._api_key,
                         fake_response_path=self.fake_ok_response_path_json)\
            .voyage_forecasts(mmsi=355906000)

        query = [tuple(q.split(':')) for q in
                 sorted(request.api_reguest.url.split(
                     'https://services.marinetraffic.com/api/voyageforecast/_api_key_/'
                 )[1].split('/'))]

        test_query = [
            ('mmsi', '355906000'), ('protocol', 'jsono')
        ]

        self.assertEqual(query, test_query)

        self.assertEqual(request.models[0].mmsi.value, 355906000)
        self.assertEqual(request.models[0].destination.value, "TANGER MED")
        self.assertEqual(request.models[0].last_port_id.value, 2037)
        self.assertEqual(request.models[0].last_port.value, "ROTTERDAM MAASVLAKTE")
        self.assertEqual(request.models[0].last_port_unlocode.value, "NLMSV")
        self.assertEqual(request.models[0].last_port_time.value, datetime(2016, 4, 19, 3, 11, 0))
        self.assertEqual(request.models[0].next_port_id.value, 1099)
        self.assertEqual(request.models[0].next_port_name.value, "TANGER MED")
        self.assertEqual(request.models[0].next_port_unlocode.value, "MAPTM")
        self.assertEqual(request.models[0].eta.value, datetime(2016, 4, 24, 8, 0, 0))
        self.assertEqual(request.models[0].eta_calc.value, datetime(2016, 4, 25, 1, 50, 0))
        self.assertEqual(request.models[0].distance_travelled.value, 112)
        self.assertEqual(request.models[0].distance_to_go.value, 1367)
        self.assertEqual(request.models[0].speed.value, 103)
        self.assertEqual(request.models[0].draught.value, 106)
        self.assertEqual(request.models[0].draught_max.value, 160)
        self.assertEqual(request.models[0].load_status_name.value, "IN_BALLAST")
        self.assertEqual(request.models[0].route.value, [
            (1.3061, 51.9496),
            (1.3198, 51.9253),
            (1.5319, 51.9358),
            (1.5484, 51.9297),
            (1.5628, 51.9072),
            (1.5685, 51.8651),
            (1.6181, 51.8556),
            (1.7286, 51.8272),
            (1.7608, 51.6416),
            (1.8051, 51.546),
            (1.8844, 51.4768),
            (1.9062, 51.4114),
            (1.7662, 51.2317),
            (1.5251, 51.108),
            (1.4385, 51.0599),
            (1.3317, 51.0018),
            (0.5845, 50.6069),
            (-1.3323, 50.2716),
            (-2.9896, 49.9666),
            (-3.9515, 49.6075),
            (-4.5608, 49.376),
            (-5.7686, 48.8919),
            (-7.0977, 47.3094),
            (-9.2948, 44.3644),
            (-10.0952, 43.2789),
            (-10.1024, 42.2256),
            (-10.0907, 41.1925),
            (-10.0974, 39.8082),
            (-10.0934, 38.716),
            (-9.7988, 37.6639),
            (-9.5553, 36.7994),
            (-9.3081, 36.5738),
            (-8.1363, 36.2893),
            (-6.2082, 35.9012),
            (-5.7619, 35.9011),
            (-5.5676, 35.9165),
            (-5.5384, 35.9225),
            (-5.519, 35.9244),
            (-5.5015, 35.9219),
            (-5.4886, 35.9094),
            (-5.49, 35.9048)
        ])