def test_id_observer(self):
        self.assertEqual(
            int(self.observation_json["observers"][0]["@id"]),
            self.observation.id_observer,
        )

        obs = Observation()
        obs._raw_data = {"observers": [{"id": 1}]}
        self.assertEqual(1, obs.id_observer)

        obs._raw_data = {"observers": [{"@id": 2}]}
        self.assertEqual(2, obs.id_observer)
        obs.id_observer = 3
        self.assertEqual(3, obs.id_observer)

        obs = Observation()
        obs.id_observer = 4
        self.assertEqual(4, obs.id_observer)
    def test_id_species(self):
        self.assertEqual(int(self.observation_json["species"]["@id"]),
                         self.observation.id_species)

        obs = Observation()
        obs._raw_data = {"species": {"id": 1}}
        self.assertEqual(1, obs.id_species)

        obs.id_species = 2
        self.assertEqual(2, obs.id_species)
    def test_species(self):
        species = self.observation.species
        self.assertEqual(species._raw_data, self.observation_json["species"])

        with mock.patch("ornitho.model.observation.Species") as mock_species:
            mock_species.id_.return_value = 1
            mock_species._raw_data.return_value = {"id": 1}
            mock_species.get.return_value = mock_species

            obs = Observation()
            obs.species = mock_species.get(1)
            self.assertEqual(mock_species.get.return_value, obs.species)

            obs2 = Observation()
            obs2._raw_data = {"species": {"id": 2}}
            self.assertEqual(mock_species.get.return_value, obs2.species)
            mock_species.get.assert_called_with(2)
    def test_relations(self):
        relations = [Relation(56436655, RelationType("same"))]
        self.assertEqual(
            relations,
            self.observation.relations,
        )

        relations = [Relation(123, RelationType("diff"))]

        obs = Observation()
        obs._raw_data = {"observers": [{"@id": "1"}]}
        obs.relations = relations
        self.assertEqual(relations, obs.relations)

        obs = Observation()
        obs.relations = relations
        self.assertEqual(relations, obs.relations)

        relations = [Relation(56436653, RelationType("probable"))]
        obs.relations = relations
        self.assertEqual(relations, obs.relations)
    def test_direction(self):
        self.assertEqual(
            float(self.observation_json["observers"][0]["extended_info"]
                  ["direction"]["degree"]),
            self.observation.direction,
        )

        obs = Observation()
        obs.direction = 123
        self.assertEqual(123, obs.direction)

        obs = Observation()
        obs._raw_data = {"observers": [{"@id": "1"}]}
        obs.direction = 234
        self.assertEqual(234, obs.direction)

        obs = Observation()
        obs.direction = 2
        self.assertEqual(2, obs.direction)

        obs.direction = 3
        self.assertEqual(3, obs.direction)