예제 #1
0
 def setUp(self):
     self.grade_level = GradeLevel(label="grade_level_here")
     self.grade_level.save()
     self.bait = Bait(bait_name="very good nibbles")
     self.bait.save()
     self.species = Species(
         latin_name="official_mouse_name",
         common_name="blackrock_mouse",
         about_this_species="too smart for traps",
     )
     self.species.save()
     self.label_menu = LabelMenu(label="label_here")
     self.label_menu.save()
     #  left off sex of animal, age of animal, scale used
     #  - foreign keys? other details which were booleans
     #  with default left off
     self.animal = Animal(species=self.species,
                          description="this is a special mouse",
                          tag_number="6789",
                          health="excellent",
                          weight_in_grams=35)
     self.animal.save()
     self.trap = Trap(trap_string="ineffective mouse trap",
                      notes="trap has not gotten any mice yet")
     self.trap.save()
     self.habitat = Habitat(label="habitat label",
                            blurb="this is a habitat",
                            image_path_for_legend="/path/here",
                            color_for_map="111")
     self.habitat.save()
     self.school = School(name="school",
                          address="school address",
                          contact_1_name="contact 1 for school",
                          contact_1_phone="000-000-0000",
                          contact_1_email="*****@*****.**",
                          contact_2_name="contact 2 for school",
                          contact_2_phone="111-111-1111",
                          contact_2_email="*****@*****.**",
                          notes="this student has appropriate information")
     self.school.save()
예제 #2
0
def create_points(data):
    for id, values in data.iteritems():
        print values
        new_point = TrapLocation()
        exp = Expedition.objects.get(id=values['exp_id'])

        if exp.grid_square_id is None:
            square_coords = values['square_number']
            exp.grid_square_id = [
                g.id for g in GridSquare.objects.all()
                if g.battleship_coords() == square_coords
            ][0]

        new_point.expedition = exp
        new_point.save()
        new_point.expedition.save()

        new_point.whether_a_trap_was_set_here = True
        new_point.transect_distance = values['distance']

        # geography:
        # TODO some duplicates inside these model methods here.. can be
        # removed.
        new_point.set_transect_bearing_wrt_magnetic_north(values['bearing'])
        new_point.set_actual_lat_long([values['lat'], values['lon']])
        new_point.set_suggested_lat_lon_from_mag_north(values['bearing'],
                                                       values['distance'])

        new_point.understory = values['understory']
        new_point.student_names = values['student_name']
        new_point.team_letter = values['team_name']
        new_point.team_number = values['trap_number']
        new_point.bait_still_there = (values['bait_left'] == 't')

        if values['animal']:
            species = Species.objects.get(
                common_name__icontains=values['animal'])
            animal = Animal()
            animal.species = species
            animal.save()
            new_point.animal = animal
            animal.save()

        if values['habitat'] is not None:
            habitat = guess_habitat(values)
            new_point.habitat_id = habitat.id

        if values['bait'] is not None:
            bait = guess_bait(values)
            new_point.bait_id = bait.id

        new_point.save()
        test_points.append(new_point)
예제 #3
0
def create_points(data):
    for id, values in data.iteritems():
        print values
        new_point = TrapLocation()
        exp = Expedition.objects.get(id=values['exp_id'])

        if exp.grid_square_id is None:
            square_coords = values['square_number']
            exp.grid_square_id = [
                g.id for g in GridSquare.objects.all()
                if g.battleship_coords() == square_coords][0]

        new_point.expedition = exp
        new_point.save()
        new_point.expedition.save()

        new_point.whether_a_trap_was_set_here = True
        new_point.transect_distance = values['distance']

        # geography:
        # TODO some duplicates inside these model methods here.. can be
        # removed.
        new_point.set_transect_bearing_wrt_magnetic_north(values['bearing'])
        new_point.set_actual_lat_long([values['lat'], values['lon']])
        new_point.set_suggested_lat_lon_from_mag_north(
            values['bearing'], values['distance'])

        new_point.understory = values['understory']
        new_point.student_names = values['student_name']
        new_point.team_letter = values['team_name']
        new_point.team_number = values['trap_number']
        new_point.bait_still_there = (values['bait_left'] == 't')

        if values['animal']:
            species = Species.objects.get(
                common_name__icontains=values['animal'])
            animal = Animal()
            animal.species = species
            animal.save()
            new_point.animal = animal
            animal.save()

        if values['habitat'] is not None:
            habitat = guess_habitat(values)
            new_point.habitat_id = habitat.id

        if values['bait'] is not None:
            bait = guess_bait(values)
            new_point.bait_id = bait.id

        new_point.save()
        test_points.append(new_point)
예제 #4
0
 def setUp(self):
     self.grade_level = GradeLevel(label="grade_level_here")
     self.grade_level.save()
     self.bait = Bait(bait_name="very good nibbles")
     self.bait.save()
     self.species = Species(latin_name="official_mouse_name",
                            common_name="blackrock_mouse",
                            about_this_species="too smart for traps",)
     self.species.save()
     self.label_menu = LabelMenu(label="label_here")
     self.label_menu.save()
     #  left off sex of animal, age of animal, scale used
     #  - foreign keys? other details which were booleans
     #  with default left off
     self.animal = Animal(species=self.species,
                          description="this is a special mouse",
                          tag_number="6789",
                          health="excellent",
                          weight_in_grams=35)
     self.animal.save()
     self.trap = Trap(trap_string="ineffective mouse trap",
                      notes="trap has not gotten any mice yet")
     self.trap.save()
     self.habitat = Habitat(label="habitat label",
                            blurb="this is a habitat",
                            image_path_for_legend="/path/here",
                            color_for_map="111")
     self.habitat.save()
     self.school = School(name="school",
                          address="school address",
                          contact_1_name="contact 1 for school",
                          contact_1_phone="000-000-0000",
                          contact_1_email="*****@*****.**",
                          contact_2_name="contact 2 for school",
                          contact_2_phone="111-111-1111",
                          contact_2_email="*****@*****.**",
                          notes="this student has appropriate information")
     self.school.save()
예제 #5
0
def deal_with_animals(point, rp):
    # Deal with animals:
    animal_key = 'animal_%d' % (point.id)
    if animal_key in rp and rp[animal_key] != 'None':
        species_id = int(rp[animal_key])
        species = Species.objects.get(id=species_id)

        # TODO (icing ) here we assume that the animal has never been
        # trapped before.
        animal = Animal()
        animal.species = species
        animal.save()

        # Note, would be nice to have a foreign key to another Animal
        # denoting that this Animal is the same actual organism as the
        # other Animal, but recaptured at a later date and
        # aidentified by the same tag.
        # animal = find_already_tagged_animal_in_the_database_somehow()

        point.animal = animal
        point.save()
        animal.save()
예제 #6
0
class TestMammalModels(TestCase):

    def setUp(self):
        self.grade_level = GradeLevel(label="grade_level_here")
        self.grade_level.save()
        self.bait = Bait(bait_name="very good nibbles")
        self.bait.save()
        self.species = Species(latin_name="official_mouse_name",
                               common_name="blackrock_mouse",
                               about_this_species="too smart for traps",)
        self.species.save()
        self.label_menu = LabelMenu(label="label_here")
        self.label_menu.save()
        #  left off sex of animal, age of animal, scale used
        #  - foreign keys? other details which were booleans
        #  with default left off
        self.animal = Animal(species=self.species,
                             description="this is a special mouse",
                             tag_number="6789",
                             health="excellent",
                             weight_in_grams=35)
        self.animal.save()
        self.trap = Trap(trap_string="ineffective mouse trap",
                         notes="trap has not gotten any mice yet")
        self.trap.save()
        self.habitat = Habitat(label="habitat label",
                               blurb="this is a habitat",
                               image_path_for_legend="/path/here",
                               color_for_map="111")
        self.habitat.save()
        self.school = School(name="school",
                             address="school address",
                             contact_1_name="contact 1 for school",
                             contact_1_phone="000-000-0000",
                             contact_1_email="*****@*****.**",
                             contact_2_name="contact 2 for school",
                             contact_2_phone="111-111-1111",
                             contact_2_email="*****@*****.**",
                             notes="this student has appropriate information")
        self.school.save()

    def test_grade_level_uni(self):
        gl = str(self.grade_level)
        self.assertEqual(gl, "grade_level_here")
        self.new_grade_level = GradeLevel()
        self.assertEqual(type(GradeLevel()), type(self.new_grade_level))
        self.assertTrue(hasattr(self.new_grade_level, 'label'))
        self.new_grade_level.label = "value of label"
        self.new_grade_level.save()
        self.assertTrue(self.new_grade_level.id)
        self.assertEqual(str(self.new_grade_level), "value of label")
        self.another_grade_level = GradeLevel()
        self.assertEqual(self.another_grade_level.label, "")

#         try:
#             self.another_grade_level.label = "a" * 267
#             self.another_grade_level.save()
#             self.fail()
#         except DatabaseError:
#             pass  # expected

        self.assertIn("label", self.new_grade_level.dir())

    def test_grade_level_no_self(self):
        new_grade_level = GradeLevel()
        self.assertEqual(type(GradeLevel()), type(new_grade_level))
        self.assertTrue(hasattr(new_grade_level, 'label'))
        new_grade_level.label = "value of label"
        new_grade_level.save()
        self.assertTrue(new_grade_level.id)
        self.assertEqual(str(new_grade_level), "value of label")
        another_grade_level = GradeLevel()
        self.assertEqual(another_grade_level.label, "")

#         try:
#             another_grade_level.label = "a" * 267
#             another_grade_level.save()
#             self.fail()
#         except DatabaseError:
#             pass  # expected

        self.assertIn("label", new_grade_level.dir())

    def test_grade_level_dir(self):
        gl = self.grade_level.dir()
        self.assertEqual(type(gl), list)
        self.assertIn("dir", gl)

    def test_species_uni(self):
        sp_uni = str(self.species)
        self.assertEqual(sp_uni, "blackrock_mouse")
        self.assertNotEqual(sp_uni, "blkms")
        self.assertIsNot(sp_uni, "blkms")
        self.new_species = Species()
        self.new_species.common_name = "blkms"
        self.assertEqual(str(self.new_species), "blkms")

    def test_species_dir(self):
        sp = self.species.dir()
        self.assertEqual(type(sp), list)
        self.assertIn("dir", sp)

    def test_trap_uni(self):
        trap_uni = str(self.trap)
        self.assertEqual(trap_uni, "ineffective mouse trap")

    def test_trap_dir(self):
        trap_dir = self.trap.dir()
        self.assertEqual(type(trap_dir), list)
        self.assertIn("trap_string", trap_dir)
        self.assertIn("notes", trap_dir)

    def test_bait_uni(self):
        bait_uni = str(self.bait)
        self.assertEqual(bait_uni, "very good nibbles")
        self.assertEqual(str(self.bait), "very good nibbles")
        self.new_bait = Bait()
        self.assertEqual(type(Bait()), type(self.new_bait))
        self.assertTrue(hasattr(self.new_bait, "bait_name"))

    def test_bait_dir(self):
        bait_dir = self.bait.dir()
        self.assertEqual(type(bait_dir), list)
        self.assertIn("bait_name", bait_dir)

    def test_label_menu_uni(self):
        label_level_uni = str(self.label_menu)
        self.assertEqual(label_level_uni, self.label_menu.label)
        self.assertEqual(label_level_uni, "label_here")

    def test_animal_uni_dir(self):
        animal_uni = str(self.animal)
        self.assertEqual(animal_uni, "blackrock_mouse")
        animal_dir = self.animal.dir()
        self.assertIn("age", animal_dir)

    def test_habitat_uni_dir(self):
        habitat_uni = str(self.habitat)
        self.assertEqual(habitat_uni, self.habitat.label)
        habitat_dir = self.habitat.dir()
        self.assertIn("label", habitat_dir)
        self.assertIn("blurb", habitat_dir)
        self.assertIn("image_path_for_legend", habitat_dir)
        self.assertIn("color_for_map", habitat_dir)

    def test_school_uni(self):
        school_uni = str(self.school)
        self.assertEqual(school_uni, self.school.name)
        self.new_school = School()
        self.new_school.name = "new school"
        self.assertEqual(str(self.new_school), "new school")
예제 #7
0
 def setUp(self):
     ''' trying to create sighting leaving out attibtutes whic are
     key or objects - location = objects = species = date = observers
     =    observation_type =     how_many_observed =      notes ='''
     self.sighting = Sighting()
     self.sighting.save()
     self.expedition = Expedition()
     self.expedition.save()
     # objects = models.GeoManager()
     self.trap_location = TrapLocation(
         expedition=self.expedition,
         notes_about_location="Notes about the location",
         team_letter='C',
         whether_a_trap_was_set_here=True,
         bait_still_there=False,
         notes_about_outcome='This is a good place for a trap.',
         student_names='Student 1, Student 2, Student 3')
     self.trap_location.save()
     self.species = Species(latin_name="official_mouse_name",
                            common_name="blackrock_mouse",
                            about_this_species="too smart for traps",)
     self.species.save()
     # left off sex of animal, age of animal, scale used - foreign keys?
     #  other details which were booleans with default left off
     self.animal_1 = Animal(species=self.species,
                            description="this is a special mouse",
                            tag_number="6789", health="excellent",
                            weight_in_grams=35)
     self.animal_1.save()
     # left off sex of animal, age of animal, scale used - foreign
     # keys? other details which were booleans with default left off
     self.animal_2 = Animal(species=self.species,
                            description="this is a naughty mouse",
                            tag_number="8355", health="excellent",
                            weight_in_grams=45)
     self.animal_2.save()
     # left off sex of animal, age of animal, scale used - foreign keys?
     # other details which were booleans with default left off
     self.animal_3 = Animal(species=self.species,
                            description="this is a super mouse",
                            tag_number="8888", health="excellent",
                            weight_in_grams=15)
     self.animal_3.save()
     self.another_expedition = Expedition(
         start_date_of_expedition=datetime.now(),
         end_date_of_expedition=datetime.now())
     self.another_expedition.save()
     self.habitat = Habitat(label="habitat label",
                            blurb="this is a habitat",
                            image_path_for_legend="/path/here",
                            color_for_map="111")
     self.habitat.save()
     self.trap_1 = TrapLocation(expedition=self.another_expedition,
                                team_letter="A", team_number=1,
                                whether_a_trap_was_set_here=True,
                                bait_still_there=False,
                                habitat=self.habitat,
                                animal=self.animal_1)
     self.trap_1.save()
     self.trap_2 = TrapLocation(expedition=self.another_expedition,
                                team_letter="B", team_number=2,
                                whether_a_trap_was_set_here=True,
                                bait_still_there=False,
                                habitat=self.habitat,
                                animal=self.animal_2)
     self.trap_2.save()
     self.trap_3 = TrapLocation(expedition=self.another_expedition,
                                team_letter="C", team_number=3,
                                whether_a_trap_was_set_here=True,
                                bait_still_there=False,
                                habitat=self.habitat,
                                animal=self.animal_3)
     self.trap_3.save()
     self.trap_4 = TrapLocation(expedition=self.another_expedition,
                                team_letter="D", team_number=4,
                                whether_a_trap_was_set_here=True,
                                bait_still_there=False,
                                habitat=self.habitat)
     self.trap_4.save()
     self.another_expedition.save()
     self.timed_expedition = Expedition(
         end_date_of_expedition=datetime.now())
     self.timed_expedition.save()
     self.time_trap = TrapLocation(expedition=self.timed_expedition,
                                   team_letter="team name here",
                                   team_number=6, habitat=self.habitat,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   animal=self.animal_1)
     self.time_trap.save()
     self.new_sighting = Sighting(species=self.species,
                                  date=datetime.now())
     self.new_sighting.save()
     self.grid_point_nw = GridPoint()
     self.grid_point_nw.save()
     self.grid_point_ne = GridPoint()
     self.grid_point_ne.save()
     self.grid_point_sw = GridPoint()
     self.grid_point_sw.save()
     self.grid_point_se = GridPoint()
     self.grid_point_se.save()
     self.grid_point_center = GridPoint()
     self.grid_point_center.save()
     self.grid_square = GridSquare(
         NW_corner=self.grid_point_nw,
         NE_corner=self.grid_point_ne,
         SW_corner=self.grid_point_sw,
         SE_corner=self.grid_point_se,
         center=self.grid_point_center,
         display_this_square=False,
         row=1,
         column=0,
         access_difficulty=3,
         terrain_difficulty=4)
     self.grid_square.save()
예제 #8
0
class TestMoreMammalModels(TestCase):
    def setUp(self):
        ''' trying to create sighting leaving out attibtutes whic are
        key or objects - location = objects = species = date = observers
        =    observation_type =     how_many_observed =      notes ='''
        self.sighting = Sighting()
        self.sighting.save()
        self.expedition = Expedition()
        self.expedition.save()
        # objects = models.GeoManager()
        self.trap_location = TrapLocation(
            expedition=self.expedition,
            notes_about_location="Notes about the location",
            team_letter='C',
            whether_a_trap_was_set_here=True,
            bait_still_there=False,
            notes_about_outcome='This is a good place for a trap.',
            student_names='Student 1, Student 2, Student 3')
        self.trap_location.save()
        self.species = Species(latin_name="official_mouse_name",
                               common_name="blackrock_mouse",
                               about_this_species="too smart for traps",)
        self.species.save()
        # left off sex of animal, age of animal, scale used - foreign keys?
        #  other details which were booleans with default left off
        self.animal_1 = Animal(species=self.species,
                               description="this is a special mouse",
                               tag_number="6789", health="excellent",
                               weight_in_grams=35)
        self.animal_1.save()
        # left off sex of animal, age of animal, scale used - foreign
        # keys? other details which were booleans with default left off
        self.animal_2 = Animal(species=self.species,
                               description="this is a naughty mouse",
                               tag_number="8355", health="excellent",
                               weight_in_grams=45)
        self.animal_2.save()
        # left off sex of animal, age of animal, scale used - foreign keys?
        # other details which were booleans with default left off
        self.animal_3 = Animal(species=self.species,
                               description="this is a super mouse",
                               tag_number="8888", health="excellent",
                               weight_in_grams=15)
        self.animal_3.save()
        self.another_expedition = Expedition(
            start_date_of_expedition=datetime.now(),
            end_date_of_expedition=datetime.now())
        self.another_expedition.save()
        self.habitat = Habitat(label="habitat label",
                               blurb="this is a habitat",
                               image_path_for_legend="/path/here",
                               color_for_map="111")
        self.habitat.save()
        self.trap_1 = TrapLocation(expedition=self.another_expedition,
                                   team_letter="A", team_number=1,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   habitat=self.habitat,
                                   animal=self.animal_1)
        self.trap_1.save()
        self.trap_2 = TrapLocation(expedition=self.another_expedition,
                                   team_letter="B", team_number=2,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   habitat=self.habitat,
                                   animal=self.animal_2)
        self.trap_2.save()
        self.trap_3 = TrapLocation(expedition=self.another_expedition,
                                   team_letter="C", team_number=3,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   habitat=self.habitat,
                                   animal=self.animal_3)
        self.trap_3.save()
        self.trap_4 = TrapLocation(expedition=self.another_expedition,
                                   team_letter="D", team_number=4,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   habitat=self.habitat)
        self.trap_4.save()
        self.another_expedition.save()
        self.timed_expedition = Expedition(
            end_date_of_expedition=datetime.now())
        self.timed_expedition.save()
        self.time_trap = TrapLocation(expedition=self.timed_expedition,
                                      team_letter="team name here",
                                      team_number=6, habitat=self.habitat,
                                      whether_a_trap_was_set_here=True,
                                      bait_still_there=False,
                                      animal=self.animal_1)
        self.time_trap.save()
        self.new_sighting = Sighting(species=self.species,
                                     date=datetime.now())
        self.new_sighting.save()
        self.grid_point_nw = GridPoint()
        self.grid_point_nw.save()
        self.grid_point_ne = GridPoint()
        self.grid_point_ne.save()
        self.grid_point_sw = GridPoint()
        self.grid_point_sw.save()
        self.grid_point_se = GridPoint()
        self.grid_point_se.save()
        self.grid_point_center = GridPoint()
        self.grid_point_center.save()
        self.grid_square = GridSquare(
            NW_corner=self.grid_point_nw,
            NE_corner=self.grid_point_ne,
            SW_corner=self.grid_point_sw,
            SE_corner=self.grid_point_se,
            center=self.grid_point_center,
            display_this_square=False,
            row=1,
            column=0,
            access_difficulty=3,
            terrain_difficulty=4)
        self.grid_square.save()

    def test_sighting_methods(self):
        self.new_sighting.set_lat_long([5.0, 8.0])
        self.assertIsNotNone(self.new_sighting.location)
        self.assertEquals(self.new_sighting.lat(), 5.0)
        # make sure blank sightings returns None
        self.assertEquals(self.sighting.lat(), None)
        self.assertEquals(self.new_sighting.lon(), 8.0)
        self.assertEquals(self.sighting.lon(), None)
        self.assertIsNotNone(self.new_sighting.date_for_solr())

    def test_species_has_attributes(self):
        species_attributes = self.species.dir()
        self.assertIn("latin_name", species_attributes)
        self.assertIn("common_name", species_attributes)
        self.assertIn("about_this_species", species_attributes)
        self.assertEquals(self.species.latin_name, "official_mouse_name")
        self.assertEquals(self.species.common_name, "blackrock_mouse")
        self.assertEquals(self.species.about_this_species,
                          "too smart for traps")
        self.other_species = Species()
        self.other_species.latin_name = "official_name"
        self.other_species.common_name = "blackrock"
        self.other_species.about_this_species = "too smart for traps"
        self.assertEquals(self.other_species.latin_name,
                          "official_name")
        self.assertEquals(self.other_species.common_name,
                          "blackrock")
        self.assertEquals(self.other_species.about_this_species,
                          "too smart for traps")

    def test_grid_point_assignments_dir_and_uni(self):
        self.grid_point_nw.set_lat_long([4, 5])
        gp_dir = self.grid_point_nw.dir()
        self.grid_point_nw.save()
        self.assertIn("geo_point", gp_dir)
        self.assertIn("objects", gp_dir)
        self.assertEquals(self.grid_point_nw.lat(), 4.0)
        self.assertEquals(self.grid_point_nw.lon(), 5.0)
        self.assertEquals(self.grid_point_nw.NSlat(),
                          '%0.5F N' % abs(self.grid_point_nw.lat()))
        self.assertEquals(self.grid_point_nw.EWlon(),
                          '%0.5F E' % abs(self.grid_point_nw.lon()))
        self.assertEquals(self.grid_point_nw.gps_coords(),
                          "%s, %s" % (self.grid_point_nw.NSlat(),
                                      self.grid_point_nw.EWlon()))
        self.assertEquals(unicode(self.grid_point_nw),
                          self.grid_point_nw.gps_coords())
        self.assertEquals(type(self.grid_point_nw.create([6, 7])),
                          type(GridPoint()))
        self.grid_point_se.set_lat_long([-8, -9])
        self.grid_point_se.save()
        self.assertEquals(self.grid_point_se.NSlat(),
                          '%0.5F S' % abs(self.grid_point_se.lat()))
        self.assertEquals(self.grid_point_se.EWlon(),
                          '%0.5F W' % abs(self.grid_point_se.lon()))
        self.assertEquals(self.grid_point_se.lat(),
                          self.grid_point_se.geo_point.coords[0])
        self.assertEquals(self.grid_point_se.lon(),
                          self.grid_point_se.geo_point.coords[1])

    def test_sighting_has_attributes(self):
        contains = dir(self.sighting)
        self.assertIn("set_lat_long", contains)
        self.assertIn("lat", contains)
        self.assertIn("lon", contains)
        self.assertIn("date_for_solr", contains)

    def test_expedition_has_attributes(self):
        contains = dir(self.expedition)
        self.assertIn("get_absolute_url", contains)
        self.assertIn("how_many_mammals_caught", contains)
        self.assertIn("team_points", contains)
        self.assertIn("set_end_time_if_none", contains)
        self.assertIn("end_minute_string", contains)
        self.assertIn("end_hour_string", contains)
        self.assertIn("set_end_time_from_strings", contains)
        self.assertIn("transects_json", contains)

    def test_expedition_dir(self):
        contains = self.expedition.dir()
        self.assertIn("get_absolute_url", contains)
        self.assertIn("how_many_mammals_caught", contains)
        self.assertIn("team_points", contains)
        self.assertIn("set_end_time_if_none", contains)
        self.assertIn("end_minute_string", contains)
        self.assertIn("end_hour_string", contains)
        self.assertIn("set_end_time_from_strings", contains)
        self.assertIn("transects_json", contains)

    def test_trap_location_has_attributes(self):
        contains = dir(self.trap_location)
        self.assertIn("create_from_obj", contains)
        self.assertIn("recreate_point_obj", contains)
        self.assertIn("date", contains)
        self.assertIn("date_for_solr", contains)
        self.assertIn("trap_nickname", contains)
        self.assertIn("transect_endpoints", contains)
        self.assertIn("set_transect_bearing_wrt_magnetic_north", contains)
        self.assertIn("transect_bearing_wrt_magnetic_north", contains)
        self.assertIn("set_suggested_lat_long", contains)
        self.assertIn("set_actual_lat_long", contains)

    def test_trap_location_date_none(self):
        the_date = self.trap_location.date()
        self.assertIsNotNone(the_date)
        the_date_solr = self.trap_location.date_for_solr()
        self.assertIsNotNone(the_date_solr)

    def test_trap_location_date_exists(self):
        date = self.time_trap.date()
        self.assertIsNotNone(date)
        date_solr = self.time_trap.date_for_solr()
        self.assertIsNotNone(date_solr)

    def test_trap_location_nickname(self):
        team_nickname = self.time_trap.trap_nickname()
        self.assertEquals(team_nickname,
                          (self.time_trap.team_letter
                           + str(self.time_trap.team_number)))

    def test_trap_location_species(self):
        species_does_not_exist = self.trap_location.species_if_any()
        self.assertIsNone(species_does_not_exist)
        has_species = self.time_trap.species_if_any()
        self.assertIsNotNone(has_species)
        self.assertEquals(has_species, "blackrock_mouse")

    def test_trap_location_habitat(self):
        no_habitat = self.trap_location.habitat_if_any()
        self.assertIsNone(no_habitat)
        has_habitat = self.time_trap.habitat_if_any()
        self.assertIsNotNone(has_habitat)
        self.assertEquals(has_habitat, "habitat label")

    def test_habitat_id(self):
        no_habitat_id = self.trap_location.habitat_id_if_any()
        self.assertIsNone(no_habitat_id)
        has_habitat_id = self.time_trap.habitat_id_if_any()
        self.assertIsNotNone(has_habitat_id)

    def test_trap_location_dir(self):
        dir_test = self.time_trap.dir()
        self.assertIn("habitat_if_any", dir_test)
        self.assertIn("habitat_id_if_any", dir_test)
        self.assertIn("species_if_any", dir_test)

    def test_create_observation_type(self):
        observation = ObservationType()
        self.failUnlessEqual(type(ObservationType()), type(observation))

    def test_create_observation_self(self):
        self.observation = ObservationType()
        self.observation.save()
        self.failUnlessEqual(type(ObservationType()), type(self.observation))

    def test_grid_square_uni_dir(self):
        self.assertEquals(unicode(self.grid_square),
                          "Row %d, column %d" % (self.grid_square.row,
                                                 self.grid_square.column))
        dir_test = self.grid_square.dir()
        self.assertIn("row", dir_test)
        self.assertIn("column", dir_test)
        self.assertIn("access_difficulty", dir_test)
        self.assertIn("corner_names", dir_test)
        self.assertIn("corners", dir_test)
        self.assertIn("corner_obj", dir_test)
        self.assertIn("corner_obj_json", dir_test)
        self.assertIn("info_for_display", dir_test)
        self.assertIn("block_json", dir_test)

    def test_grid_square_corner_names_method(self):
        corner_names = self.grid_square.corner_names()
        self.assertEquals(
            ['SW_corner', 'NW_corner', 'NE_corner', 'SE_corner', 'center'],
            corner_names)

    '''There may be a typo in the actual program says for
    corner_name may be supposed to be corner_names'''
    # def test_grid_square_corners(self):
    #     #corner_names = self.grid_square.corner_names()
    #     corners = self.grid_square.corners()
    #     self.assertIn( "SW_corner", corners)
    #     self.assertIn( type(GridPoint()), corners)

    def test_corner_obj(self):
        self.grid_point_nw.set_lat_long([4, 5])
        self.grid_point_se.set_lat_long([-8, -9])
        self.grid_point_sw.set_lat_long([-8, -9])
        self.grid_point_ne.set_lat_long([-8, -9])
        self.grid_point_center.set_lat_long([-8, -9])
        corner_objects = self.grid_square.corner_obj()
        self.assertEquals([[-8.0, -9.0], [4.0, 5.0], [-8.0, -9.0],
                           [-8.0, -9.0], [-8.0, -9.0]], corner_objects)

    def test_corner_obj_json(self):
        self.grid_point_nw.set_lat_long([4, 5])
        self.grid_point_se.set_lat_long([-8, -9])
        self.grid_point_sw.set_lat_long([-8, -9])
        self.grid_point_ne.set_lat_long([-8, -9])
        self.grid_point_center.set_lat_long([-8, -9])
        corner_obj_json = self.grid_square.corner_obj_json()
        self.assertIn("[4.0, 5.0]", corner_obj_json)
        self.assertEquals(('[[-8.0, -9.0], [4.0, 5.0], [-8.0, -9.0], '
                           '[-8.0, -9.0], [-8.0, -9.0]]'), corner_obj_json)

    def test_battleship_coords(self):
        battleship_coordinates = self.grid_square.battleship_coords()
        self.assertIsNotNone(battleship_coordinates)

    # Test More Expedition Methods
    def test_trap_locations(self):
        '''Test methods requiring TrapLocations, Animals, and Teams'''
        '''This is not a good test - the unicode returns the gps coordinates
        so it is returning TrapLocation objects but need to verify that they
        have team letter and number'''
        ae = self.another_expedition
        trap_location_team = ae.trap_locations_ordered_by_team()
        self.assertEquals(1, trap_location_team[0].team_number)
        self.assertEquals('A', trap_location_team[0].team_letter)
        self.assertEquals(2, trap_location_team[1].team_number)
        self.assertEquals('B', trap_location_team[1].team_letter)
        self.assertEquals(3, trap_location_team[2].team_number)
        self.assertEquals('C', trap_location_team[2].team_letter)
        self.assertEquals(4, trap_location_team[3].team_number)
        self.assertEquals('D', trap_location_team[3].team_letter)

    def test_mammals(self):
        '''Only return trap locations which have caught an animal.
        In this case the first three as in above method test_trap_locations.
        Should exclude trap 4.'''
        animals_trapped = self.another_expedition.animal_locations()
        self.assertEquals(1, animals_trapped[0].team_number)
        self.assertEquals("blackrock_mouse",
                          animals_trapped[0].animal.species.common_name)
        self.assertEquals('A', animals_trapped[0].team_letter)
        self.assertEquals(2, animals_trapped[1].team_number)
        self.assertEquals('B', animals_trapped[1].team_letter)
        self.assertEquals(3, animals_trapped[2].team_number)
        self.assertEquals('C', animals_trapped[2].team_letter)

    def test_expedition_unicode(self):
        self.assertEquals(
            unicode(self.another_expedition),
            "Expedition %d started on %s" % (
                self.another_expedition.id,
                self.another_expedition.start_date_of_expedition.strftime(
                    "%m/%d/%y")))

    def test_expedition_absolute_url(self):
        self.assertEquals(
            self.another_expedition.get_absolute_url(),
            "/mammals/expedition/%i/" % self.another_expedition.id)

    def test_number_of_mammals(self):
        number_of_mammals = self.another_expedition.how_many_mammals_caught()
        self.assertEquals(number_of_mammals, 3)

    def test_team_points(self):
        '''Takes a team_letter and returns matching trap locations
        with letter'''
        team_a = self.another_expedition.team_points('A')
        self.assertEquals(team_a[0].team_letter, 'A')
        team_b = self.another_expedition.team_points('B')
        self.assertEquals(team_b[0].team_letter, 'B')
        team_c = self.another_expedition.team_points('C')
        self.assertEquals(team_c[0].team_letter, 'C')

    def test_end_minute_string(self):
        self.new_expedition = Expedition(field_notes="some field notes here")
        self.new_expedition.save()
        end_minute_string = self.new_expedition.end_minute_string()
        self.assertIsNotNone(end_minute_string)
        self.assertEquals(
            end_minute_string,
            "%02d" % self.new_expedition.end_date_of_expedition.minute)

    def test_end_hour_string(self):
        self.new_expedition = Expedition(field_notes="some field notes here")
        self.new_expedition.save()
        end_hour_string = self.new_expedition.end_hour_string()
        self.assertIsNotNone(end_hour_string)
        self.assertEquals(
            end_hour_string,
            "%02d" % self.new_expedition.end_date_of_expedition.hour)

    def test_expedition_set_time_from_strings(self):
        # not sure how to check actual contents of the time,
        # keeps giving type errors
        self.another_expedition.set_end_time_from_strings("5", "45")
        self.assertIsNotNone(self.another_expedition.end_date_of_expedition)

    # Now test TrapLocation methods
    def test_points_trap_location(self):
        self.trap_4.set_suggested_lat_long([4, 5])
        self.trap_4.set_actual_lat_long([6, 7])
        self.trap_4.save()

        actual_lat = self.trap_4.actual_lat()
        actual_lon = self.trap_4.actual_lon()
        self.assertEquals(actual_lat, 6)
        self.assertEquals(actual_lon, 7)

        suggested_lon = self.trap_4.suggested_lon()
        suggested_lat = self.trap_4.suggested_lat()
        self.assertEquals(suggested_lat, 4)
        self.assertEquals(suggested_lon, 5)

    def test_points_trap_location_when_none(self):
        self.assertIsNone(self.time_trap.suggested_lat())
        self.assertIsNone(self.time_trap.suggested_lon())
        self.assertIsNone(self.time_trap.actual_lat())
        self.assertIsNone(self.time_trap.actual_lon())

    def test_trap_location_unicode(self):
        self.assertEquals(unicode(self.trap_4), self.trap_4.gps_coords())

    def test_trap_location_suggested_gps_coords(self):
        self.assertEquals(
            self.trap_4.suggested_gps_coords(),
            "%s, %s" % (self.trap_4.suggested_NSlat(),
                        self.trap_4.suggested_EWlon()))

    def test_trap_location_actual_gps_coords(self):
        self.assertEquals(
            self.trap_4.actual_gps_coords(),
            "%s, %s" % (self.trap_4.actual_NSlat(),
                        self.trap_4.actual_EWlon()))

    def test_trap_location_suggested_NSlat_EWlon_positive_values(self):
        self.trap_4.set_suggested_lat_long([4, 5])
        self.trap_4.save()
        self.assertEquals(
            self.trap_4.suggested_NSlat(),
            '%0.5F N' % abs(self.trap_4.suggested_lat()))
        self.assertEquals(
            self.trap_4.suggested_EWlon(),
            '%0.5F E' % abs(self.trap_4.suggested_lon()))

    def test_trap_location_suggested_NSlat_EWlon_negative_values(self):
        self.trap_4.set_suggested_lat_long([-3, -4])
        self.trap_4.save()

        self.assertEquals(
            self.trap_4.suggested_NSlat(),
            '%0.5F S' % abs(self.trap_4.suggested_lat()))
        self.assertEquals(
            self.trap_4.suggested_EWlon(),
            '%0.5F W' % abs(self.trap_4.suggested_lon()))

    def test_trap_location_suggested_NSlat_EWlon_None(self):
        self.assertIsNone(self.time_trap.suggested_lat())
        self.assertIsNone(self.time_trap.suggested_lon())

    def test_trap_location_actual_NSlat_EWlon_positve_values(self):
        self.trap_4.set_actual_lat_long([4, 5])
        self.trap_4.save()
        self.assertEquals(
            self.trap_4.actual_NSlat(),
            '%0.5F N' % abs(self.trap_4.actual_lat()))
        self.assertEquals(
            self.trap_4.actual_EWlon(),
            '%0.5F E' % abs(self.trap_4.actual_lon()))

    def test_trap_location_actual_NSlat_EWlon_negative_values(self):
        self.trap_4.set_actual_lat_long([-3, -4])
        self.trap_4.save()

        self.assertEquals(
            self.trap_4.actual_NSlat(),
            '%0.5F S' % abs(self.trap_4.actual_lat()))
        self.assertEquals(
            self.trap_4.actual_EWlon(),
            '%0.5F W' % abs(self.trap_4.actual_lon()))

    def test_trap_location_actual_NSlat_EWlon_None(self):
        self.assertIsNone(self.time_trap.actual_lat())
        self.assertIsNone(self.time_trap.actual_lon())

    def test_trap_location_school(self):
        self.school = School(name="school",
                             address="school address",
                             contact_1_name="contact 1 for school",
                             contact_1_phone="000-000-0000",
                             contact_1_email="*****@*****.**",
                             contact_2_name="contact 2 for school",
                             contact_2_phone="111-111-1111",
                             contact_2_email="*****@*****.**",
                             notes="this student has appropriate information")
        self.school.save()
        self.another_expedition.school = self.school
        self.assertIsNotNone(self.trap_4.school_if_any())
        self.assertEquals(self.trap_4.school_if_any(), "school")
        self.assertIsNone(self.time_trap.school_if_any())

    def test_sightings_date_for_solr(self):
        self.new_sighting = Sighting(species=self.species, date=datetime.now())
        self.new_sighting.save()
        self.assertIsNotNone(self.new_sighting.date_for_solr())

    def tearDown(self):
        self.sighting.delete()
        self.expedition.delete()
        self.trap_location.delete()
        self.timed_expedition.delete()
        self.time_trap.delete()
예제 #9
0
class TestMammalModels(TestCase):
    def setUp(self):
        self.grade_level = GradeLevel(label="grade_level_here")
        self.grade_level.save()
        self.bait = Bait(bait_name="very good nibbles")
        self.bait.save()
        self.species = Species(
            latin_name="official_mouse_name",
            common_name="blackrock_mouse",
            about_this_species="too smart for traps",
        )
        self.species.save()
        self.label_menu = LabelMenu(label="label_here")
        self.label_menu.save()
        #  left off sex of animal, age of animal, scale used
        #  - foreign keys? other details which were booleans
        #  with default left off
        self.animal = Animal(species=self.species,
                             description="this is a special mouse",
                             tag_number="6789",
                             health="excellent",
                             weight_in_grams=35)
        self.animal.save()
        self.trap = Trap(trap_string="ineffective mouse trap",
                         notes="trap has not gotten any mice yet")
        self.trap.save()
        self.habitat = Habitat(label="habitat label",
                               blurb="this is a habitat",
                               image_path_for_legend="/path/here",
                               color_for_map="111")
        self.habitat.save()
        self.school = School(name="school",
                             address="school address",
                             contact_1_name="contact 1 for school",
                             contact_1_phone="000-000-0000",
                             contact_1_email="*****@*****.**",
                             contact_2_name="contact 2 for school",
                             contact_2_phone="111-111-1111",
                             contact_2_email="*****@*****.**",
                             notes="this student has appropriate information")
        self.school.save()

    def test_grade_level_uni(self):
        gl = self.grade_level.__unicode__()
        self.assertEquals(gl, "grade_level_here")
        self.new_grade_level = GradeLevel()
        self.failUnlessEqual(type(GradeLevel()), type(self.new_grade_level))
        self.failUnless(hasattr(self.new_grade_level, 'label'))
        self.new_grade_level.label = "value of label"
        self.new_grade_level.save()
        self.failUnless(self.new_grade_level.id)
        self.assertEquals(unicode(self.new_grade_level), "value of label")
        self.another_grade_level = GradeLevel()
        self.assertEquals(self.another_grade_level.label, "")

        #         try:
        #             self.another_grade_level.label = "a" * 267
        #             self.another_grade_level.save()
        #             self.fail()
        #         except DatabaseError:
        #             pass  # expected

        self.assertIn("label", self.new_grade_level.dir())

    def test_grade_level_no_self(self):
        new_grade_level = GradeLevel()
        self.failUnlessEqual(type(GradeLevel()), type(new_grade_level))
        self.failUnless(hasattr(new_grade_level, 'label'))
        new_grade_level.label = "value of label"
        new_grade_level.save()
        self.failUnless(new_grade_level.id)
        self.assertEquals(unicode(new_grade_level), "value of label")
        another_grade_level = GradeLevel()
        self.assertEquals(another_grade_level.label, "")

        #         try:
        #             another_grade_level.label = "a" * 267
        #             another_grade_level.save()
        #             self.fail()
        #         except DatabaseError:
        #             pass  # expected

        self.assertIn("label", new_grade_level.dir())

    def test_grade_level_dir(self):
        gl = self.grade_level.dir()
        self.assertEquals(type(gl), list)
        self.assertIn("dir", gl)

    def test_species_uni(self):
        sp_uni = self.species.__unicode__()
        self.assertEquals(sp_uni, "blackrock_mouse")
        self.assertNotEquals(sp_uni, "blkms")
        self.assertIsNot(sp_uni, "blkms")
        self.new_species = Species()
        self.new_species.common_name = "blkms"
        self.assertEquals(unicode(self.new_species), "blkms")

    def test_species_dir(self):
        sp = self.species.dir()
        self.assertEquals(type(sp), list)
        self.assertIn("dir", sp)

    def test_trap_uni(self):
        trap_uni = self.trap.__unicode__()
        self.assertEquals(trap_uni, "ineffective mouse trap")

    def test_trap_dir(self):
        trap_dir = self.trap.dir()
        self.assertEquals(type(trap_dir), list)
        self.assertIn("trap_string", trap_dir)
        self.assertIn("notes", trap_dir)

    def test_bait_uni(self):
        bait_uni = self.bait.__unicode__()
        self.assertEquals(bait_uni, "very good nibbles")
        self.assertEquals(unicode(self.bait), "very good nibbles")
        self.new_bait = Bait()
        self.failUnlessEqual(type(Bait()), type(self.new_bait))
        self.failUnless(hasattr(self.new_bait, "bait_name"))

    def test_bait_dir(self):
        bait_dir = self.bait.dir()
        self.assertEquals(type(bait_dir), list)
        self.assertIn("bait_name", bait_dir)

    def test_label_menu_uni(self):
        label_level_uni = self.label_menu.__unicode__()
        self.assertEquals(label_level_uni, self.label_menu.label)
        self.assertEquals(label_level_uni, "label_here")

    def test_animal_uni_dir(self):
        animal_uni = self.animal.__unicode__()
        self.assertEquals(animal_uni, "blackrock_mouse")
        animal_dir = self.animal.dir()
        self.assertIn("age", animal_dir)

    def test_habitat_uni_dir(self):
        habitat_uni = self.habitat.__unicode__()
        self.assertEquals(habitat_uni, self.habitat.label)
        habitat_dir = self.habitat.dir()
        self.assertIn("label", habitat_dir)
        self.assertIn("blurb", habitat_dir)
        self.assertIn("image_path_for_legend", habitat_dir)
        self.assertIn("color_for_map", habitat_dir)

    def test_school_uni(self):
        school_uni = self.school.__unicode__()
        self.assertEquals(school_uni, self.school.name)
        self.new_school = School()
        self.new_school.name = "new school"
        self.assertEquals(unicode(self.new_school), "new school")
예제 #10
0
 def setUp(self):
     ''' trying to create sighting leaving out attibtutes whic are
     key or objects - location = objects = species = date = observers
     =    observation_type =     how_many_observed =      notes ='''
     self.sighting = Sighting()
     self.sighting.save()
     self.expedition = Expedition()
     self.expedition.save()
     # objects = models.GeoManager()
     self.trap_location = TrapLocation(
         expedition=self.expedition,
         notes_about_location="Notes about the location",
         team_letter='C',
         whether_a_trap_was_set_here=True,
         bait_still_there=False,
         notes_about_outcome='This is a good place for a trap.',
         student_names='Student 1, Student 2, Student 3')
     self.trap_location.save()
     self.species = Species(
         latin_name="official_mouse_name",
         common_name="blackrock_mouse",
         about_this_species="too smart for traps",
     )
     self.species.save()
     # left off sex of animal, age of animal, scale used - foreign keys?
     #  other details which were booleans with default left off
     self.animal_1 = Animal(species=self.species,
                            description="this is a special mouse",
                            tag_number="6789",
                            health="excellent",
                            weight_in_grams=35)
     self.animal_1.save()
     # left off sex of animal, age of animal, scale used - foreign
     # keys? other details which were booleans with default left off
     self.animal_2 = Animal(species=self.species,
                            description="this is a naughty mouse",
                            tag_number="8355",
                            health="excellent",
                            weight_in_grams=45)
     self.animal_2.save()
     # left off sex of animal, age of animal, scale used - foreign keys?
     # other details which were booleans with default left off
     self.animal_3 = Animal(species=self.species,
                            description="this is a super mouse",
                            tag_number="8888",
                            health="excellent",
                            weight_in_grams=15)
     self.animal_3.save()
     self.another_expedition = Expedition(
         start_date_of_expedition=datetime.now(),
         end_date_of_expedition=datetime.now())
     self.another_expedition.save()
     self.habitat = Habitat(label="habitat label",
                            blurb="this is a habitat",
                            image_path_for_legend="/path/here",
                            color_for_map="111")
     self.habitat.save()
     self.trap_1 = TrapLocation(expedition=self.another_expedition,
                                team_letter="A",
                                team_number=1,
                                whether_a_trap_was_set_here=True,
                                bait_still_there=False,
                                habitat=self.habitat,
                                animal=self.animal_1)
     self.trap_1.save()
     self.trap_2 = TrapLocation(expedition=self.another_expedition,
                                team_letter="B",
                                team_number=2,
                                whether_a_trap_was_set_here=True,
                                bait_still_there=False,
                                habitat=self.habitat,
                                animal=self.animal_2)
     self.trap_2.save()
     self.trap_3 = TrapLocation(expedition=self.another_expedition,
                                team_letter="C",
                                team_number=3,
                                whether_a_trap_was_set_here=True,
                                bait_still_there=False,
                                habitat=self.habitat,
                                animal=self.animal_3)
     self.trap_3.save()
     self.trap_4 = TrapLocation(expedition=self.another_expedition,
                                team_letter="D",
                                team_number=4,
                                whether_a_trap_was_set_here=True,
                                bait_still_there=False,
                                habitat=self.habitat)
     self.trap_4.save()
     self.another_expedition.save()
     self.timed_expedition = Expedition(
         end_date_of_expedition=datetime.now())
     self.timed_expedition.save()
     self.time_trap = TrapLocation(expedition=self.timed_expedition,
                                   team_letter="team name here",
                                   team_number=6,
                                   habitat=self.habitat,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   animal=self.animal_1)
     self.time_trap.save()
     self.new_sighting = Sighting(species=self.species, date=datetime.now())
     self.new_sighting.save()
     self.grid_point_nw = GridPoint()
     self.grid_point_nw.save()
     self.grid_point_ne = GridPoint()
     self.grid_point_ne.save()
     self.grid_point_sw = GridPoint()
     self.grid_point_sw.save()
     self.grid_point_se = GridPoint()
     self.grid_point_se.save()
     self.grid_point_center = GridPoint()
     self.grid_point_center.save()
     self.grid_square = GridSquare(NW_corner=self.grid_point_nw,
                                   NE_corner=self.grid_point_ne,
                                   SW_corner=self.grid_point_sw,
                                   SE_corner=self.grid_point_se,
                                   center=self.grid_point_center,
                                   display_this_square=False,
                                   row=1,
                                   column=0,
                                   access_difficulty=3,
                                   terrain_difficulty=4)
     self.grid_square.save()
예제 #11
0
class TestMoreMammalModels(TestCase):
    def setUp(self):
        ''' trying to create sighting leaving out attibtutes whic are
        key or objects - location = objects = species = date = observers
        =    observation_type =     how_many_observed =      notes ='''
        self.sighting = Sighting()
        self.sighting.save()
        self.expedition = Expedition()
        self.expedition.save()
        # objects = models.GeoManager()
        self.trap_location = TrapLocation(
            expedition=self.expedition,
            notes_about_location="Notes about the location",
            team_letter='C',
            whether_a_trap_was_set_here=True,
            bait_still_there=False,
            notes_about_outcome='This is a good place for a trap.',
            student_names='Student 1, Student 2, Student 3')
        self.trap_location.save()
        self.species = Species(
            latin_name="official_mouse_name",
            common_name="blackrock_mouse",
            about_this_species="too smart for traps",
        )
        self.species.save()
        # left off sex of animal, age of animal, scale used - foreign keys?
        #  other details which were booleans with default left off
        self.animal_1 = Animal(species=self.species,
                               description="this is a special mouse",
                               tag_number="6789",
                               health="excellent",
                               weight_in_grams=35)
        self.animal_1.save()
        # left off sex of animal, age of animal, scale used - foreign
        # keys? other details which were booleans with default left off
        self.animal_2 = Animal(species=self.species,
                               description="this is a naughty mouse",
                               tag_number="8355",
                               health="excellent",
                               weight_in_grams=45)
        self.animal_2.save()
        # left off sex of animal, age of animal, scale used - foreign keys?
        # other details which were booleans with default left off
        self.animal_3 = Animal(species=self.species,
                               description="this is a super mouse",
                               tag_number="8888",
                               health="excellent",
                               weight_in_grams=15)
        self.animal_3.save()
        self.another_expedition = Expedition(
            start_date_of_expedition=datetime.now(),
            end_date_of_expedition=datetime.now())
        self.another_expedition.save()
        self.habitat = Habitat(label="habitat label",
                               blurb="this is a habitat",
                               image_path_for_legend="/path/here",
                               color_for_map="111")
        self.habitat.save()
        self.trap_1 = TrapLocation(expedition=self.another_expedition,
                                   team_letter="A",
                                   team_number=1,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   habitat=self.habitat,
                                   animal=self.animal_1)
        self.trap_1.save()
        self.trap_2 = TrapLocation(expedition=self.another_expedition,
                                   team_letter="B",
                                   team_number=2,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   habitat=self.habitat,
                                   animal=self.animal_2)
        self.trap_2.save()
        self.trap_3 = TrapLocation(expedition=self.another_expedition,
                                   team_letter="C",
                                   team_number=3,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   habitat=self.habitat,
                                   animal=self.animal_3)
        self.trap_3.save()
        self.trap_4 = TrapLocation(expedition=self.another_expedition,
                                   team_letter="D",
                                   team_number=4,
                                   whether_a_trap_was_set_here=True,
                                   bait_still_there=False,
                                   habitat=self.habitat)
        self.trap_4.save()
        self.another_expedition.save()
        self.timed_expedition = Expedition(
            end_date_of_expedition=datetime.now())
        self.timed_expedition.save()
        self.time_trap = TrapLocation(expedition=self.timed_expedition,
                                      team_letter="team name here",
                                      team_number=6,
                                      habitat=self.habitat,
                                      whether_a_trap_was_set_here=True,
                                      bait_still_there=False,
                                      animal=self.animal_1)
        self.time_trap.save()
        self.new_sighting = Sighting(species=self.species, date=datetime.now())
        self.new_sighting.save()
        self.grid_point_nw = GridPoint()
        self.grid_point_nw.save()
        self.grid_point_ne = GridPoint()
        self.grid_point_ne.save()
        self.grid_point_sw = GridPoint()
        self.grid_point_sw.save()
        self.grid_point_se = GridPoint()
        self.grid_point_se.save()
        self.grid_point_center = GridPoint()
        self.grid_point_center.save()
        self.grid_square = GridSquare(NW_corner=self.grid_point_nw,
                                      NE_corner=self.grid_point_ne,
                                      SW_corner=self.grid_point_sw,
                                      SE_corner=self.grid_point_se,
                                      center=self.grid_point_center,
                                      display_this_square=False,
                                      row=1,
                                      column=0,
                                      access_difficulty=3,
                                      terrain_difficulty=4)
        self.grid_square.save()

    def test_sighting_methods(self):
        self.new_sighting.set_lat_long([5.0, 8.0])
        self.assertIsNotNone(self.new_sighting.location)
        self.assertEquals(self.new_sighting.lat(), 5.0)
        # make sure blank sightings returns None
        self.assertEquals(self.sighting.lat(), None)
        self.assertEquals(self.new_sighting.lon(), 8.0)
        self.assertEquals(self.sighting.lon(), None)
        self.assertIsNotNone(self.new_sighting.date_for_solr())

    def test_species_has_attributes(self):
        species_attributes = self.species.dir()
        self.assertIn("latin_name", species_attributes)
        self.assertIn("common_name", species_attributes)
        self.assertIn("about_this_species", species_attributes)
        self.assertEquals(self.species.latin_name, "official_mouse_name")
        self.assertEquals(self.species.common_name, "blackrock_mouse")
        self.assertEquals(self.species.about_this_species,
                          "too smart for traps")
        self.other_species = Species()
        self.other_species.latin_name = "official_name"
        self.other_species.common_name = "blackrock"
        self.other_species.about_this_species = "too smart for traps"
        self.assertEquals(self.other_species.latin_name, "official_name")
        self.assertEquals(self.other_species.common_name, "blackrock")
        self.assertEquals(self.other_species.about_this_species,
                          "too smart for traps")

    def test_grid_point_assignments_dir_and_uni(self):
        self.grid_point_nw.set_lat_long([4, 5])
        gp_dir = self.grid_point_nw.dir()
        self.grid_point_nw.save()
        self.assertIn("geo_point", gp_dir)
        self.assertIn("objects", gp_dir)
        self.assertEquals(self.grid_point_nw.lat(), 4.0)
        self.assertEquals(self.grid_point_nw.lon(), 5.0)
        self.assertEquals(self.grid_point_nw.NSlat(),
                          '%0.5F N' % abs(self.grid_point_nw.lat()))
        self.assertEquals(self.grid_point_nw.EWlon(),
                          '%0.5F E' % abs(self.grid_point_nw.lon()))
        self.assertEquals(
            self.grid_point_nw.gps_coords(), "%s, %s" %
            (self.grid_point_nw.NSlat(), self.grid_point_nw.EWlon()))
        self.assertEquals(unicode(self.grid_point_nw),
                          self.grid_point_nw.gps_coords())
        self.assertEquals(type(self.grid_point_nw.create([6, 7])),
                          type(GridPoint()))
        self.grid_point_se.set_lat_long([-8, -9])
        self.grid_point_se.save()
        self.assertEquals(self.grid_point_se.NSlat(),
                          '%0.5F S' % abs(self.grid_point_se.lat()))
        self.assertEquals(self.grid_point_se.EWlon(),
                          '%0.5F W' % abs(self.grid_point_se.lon()))
        self.assertEquals(self.grid_point_se.lat(),
                          self.grid_point_se.geo_point.coords[0])
        self.assertEquals(self.grid_point_se.lon(),
                          self.grid_point_se.geo_point.coords[1])

    def test_sighting_has_attributes(self):
        contains = dir(self.sighting)
        self.assertIn("set_lat_long", contains)
        self.assertIn("lat", contains)
        self.assertIn("lon", contains)
        self.assertIn("date_for_solr", contains)

    def test_expedition_has_attributes(self):
        contains = dir(self.expedition)
        self.assertIn("get_absolute_url", contains)
        self.assertIn("how_many_mammals_caught", contains)
        self.assertIn("team_points", contains)
        self.assertIn("set_end_time_if_none", contains)
        self.assertIn("end_minute_string", contains)
        self.assertIn("end_hour_string", contains)
        self.assertIn("set_end_time_from_strings", contains)
        self.assertIn("transects_json", contains)

    def test_expedition_dir(self):
        contains = self.expedition.dir()
        self.assertIn("get_absolute_url", contains)
        self.assertIn("how_many_mammals_caught", contains)
        self.assertIn("team_points", contains)
        self.assertIn("set_end_time_if_none", contains)
        self.assertIn("end_minute_string", contains)
        self.assertIn("end_hour_string", contains)
        self.assertIn("set_end_time_from_strings", contains)
        self.assertIn("transects_json", contains)

    def test_trap_location_has_attributes(self):
        contains = dir(self.trap_location)
        self.assertIn("create_from_obj", contains)
        self.assertIn("recreate_point_obj", contains)
        self.assertIn("date", contains)
        self.assertIn("date_for_solr", contains)
        self.assertIn("trap_nickname", contains)
        self.assertIn("transect_endpoints", contains)
        self.assertIn("set_transect_bearing_wrt_magnetic_north", contains)
        self.assertIn("transect_bearing_wrt_magnetic_north", contains)
        self.assertIn("set_suggested_lat_long", contains)
        self.assertIn("set_actual_lat_long", contains)

    def test_trap_location_date_none(self):
        the_date = self.trap_location.date()
        self.assertIsNotNone(the_date)
        the_date_solr = self.trap_location.date_for_solr()
        self.assertIsNotNone(the_date_solr)

    def test_trap_location_date_exists(self):
        date = self.time_trap.date()
        self.assertIsNotNone(date)
        date_solr = self.time_trap.date_for_solr()
        self.assertIsNotNone(date_solr)

    def test_trap_location_nickname(self):
        team_nickname = self.time_trap.trap_nickname()
        self.assertEquals(
            team_nickname,
            (self.time_trap.team_letter + str(self.time_trap.team_number)))

    def test_trap_location_species(self):
        species_does_not_exist = self.trap_location.species_if_any()
        self.assertIsNone(species_does_not_exist)
        has_species = self.time_trap.species_if_any()
        self.assertIsNotNone(has_species)
        self.assertEquals(has_species, "blackrock_mouse")

    def test_trap_location_habitat(self):
        no_habitat = self.trap_location.habitat_if_any()
        self.assertIsNone(no_habitat)
        has_habitat = self.time_trap.habitat_if_any()
        self.assertIsNotNone(has_habitat)
        self.assertEquals(has_habitat, "habitat label")

    def test_habitat_id(self):
        no_habitat_id = self.trap_location.habitat_id_if_any()
        self.assertIsNone(no_habitat_id)
        has_habitat_id = self.time_trap.habitat_id_if_any()
        self.assertIsNotNone(has_habitat_id)

    def test_trap_location_dir(self):
        dir_test = self.time_trap.dir()
        self.assertIn("habitat_if_any", dir_test)
        self.assertIn("habitat_id_if_any", dir_test)
        self.assertIn("species_if_any", dir_test)

    def test_create_observation_type(self):
        observation = ObservationType()
        self.failUnlessEqual(type(ObservationType()), type(observation))

    def test_create_observation_self(self):
        self.observation = ObservationType()
        self.observation.save()
        self.failUnlessEqual(type(ObservationType()), type(self.observation))

    def test_grid_square_uni_dir(self):
        self.assertEquals(
            unicode(self.grid_square), "Row %d, column %d" %
            (self.grid_square.row, self.grid_square.column))
        dir_test = self.grid_square.dir()
        self.assertIn("row", dir_test)
        self.assertIn("column", dir_test)
        self.assertIn("access_difficulty", dir_test)
        self.assertIn("corner_names", dir_test)
        self.assertIn("corners", dir_test)
        self.assertIn("corner_obj", dir_test)
        self.assertIn("corner_obj_json", dir_test)
        self.assertIn("info_for_display", dir_test)
        self.assertIn("block_json", dir_test)

    def test_grid_square_corner_names_method(self):
        corner_names = self.grid_square.corner_names()
        self.assertEquals(
            ['SW_corner', 'NW_corner', 'NE_corner', 'SE_corner', 'center'],
            corner_names)

    '''There may be a typo in the actual program says for
    corner_name may be supposed to be corner_names'''

    # def test_grid_square_corners(self):
    #     #corner_names = self.grid_square.corner_names()
    #     corners = self.grid_square.corners()
    #     self.assertIn( "SW_corner", corners)
    #     self.assertIn( type(GridPoint()), corners)

    def test_corner_obj(self):
        self.grid_point_nw.set_lat_long([4, 5])
        self.grid_point_se.set_lat_long([-8, -9])
        self.grid_point_sw.set_lat_long([-8, -9])
        self.grid_point_ne.set_lat_long([-8, -9])
        self.grid_point_center.set_lat_long([-8, -9])
        corner_objects = self.grid_square.corner_obj()
        self.assertEquals([[-8.0, -9.0], [4.0, 5.0], [-8.0, -9.0],
                           [-8.0, -9.0], [-8.0, -9.0]], corner_objects)

    def test_corner_obj_json(self):
        self.grid_point_nw.set_lat_long([4, 5])
        self.grid_point_se.set_lat_long([-8, -9])
        self.grid_point_sw.set_lat_long([-8, -9])
        self.grid_point_ne.set_lat_long([-8, -9])
        self.grid_point_center.set_lat_long([-8, -9])
        corner_obj_json = self.grid_square.corner_obj_json()
        self.assertIn("[4.0, 5.0]", corner_obj_json)
        self.assertEquals(('[[-8.0, -9.0], [4.0, 5.0], [-8.0, -9.0], '
                           '[-8.0, -9.0], [-8.0, -9.0]]'), corner_obj_json)

    def test_battleship_coords(self):
        battleship_coordinates = self.grid_square.battleship_coords()
        self.assertIsNotNone(battleship_coordinates)

    # Test More Expedition Methods
    def test_trap_locations(self):
        '''Test methods requiring TrapLocations, Animals, and Teams'''
        '''This is not a good test - the unicode returns the gps coordinates
        so it is returning TrapLocation objects but need to verify that they
        have team letter and number'''
        ae = self.another_expedition
        trap_location_team = ae.trap_locations_ordered_by_team()
        self.assertEquals(1, trap_location_team[0].team_number)
        self.assertEquals('A', trap_location_team[0].team_letter)
        self.assertEquals(2, trap_location_team[1].team_number)
        self.assertEquals('B', trap_location_team[1].team_letter)
        self.assertEquals(3, trap_location_team[2].team_number)
        self.assertEquals('C', trap_location_team[2].team_letter)
        self.assertEquals(4, trap_location_team[3].team_number)
        self.assertEquals('D', trap_location_team[3].team_letter)

    def test_mammals(self):
        '''Only return trap locations which have caught an animal.
        In this case the first three as in above method test_trap_locations.
        Should exclude trap 4.'''
        animals_trapped = self.another_expedition.animal_locations()
        self.assertEquals(1, animals_trapped[0].team_number)
        self.assertEquals("blackrock_mouse",
                          animals_trapped[0].animal.species.common_name)
        self.assertEquals('A', animals_trapped[0].team_letter)
        self.assertEquals(2, animals_trapped[1].team_number)
        self.assertEquals('B', animals_trapped[1].team_letter)
        self.assertEquals(3, animals_trapped[2].team_number)
        self.assertEquals('C', animals_trapped[2].team_letter)

    def test_expedition_unicode(self):
        self.assertEquals(
            unicode(self.another_expedition), "Expedition %d started on %s" %
            (self.another_expedition.id,
             self.another_expedition.start_date_of_expedition.strftime(
                 "%m/%d/%y")))

    def test_expedition_absolute_url(self):
        self.assertEquals(
            self.another_expedition.get_absolute_url(),
            "/mammals/expedition/%i/" % self.another_expedition.id)

    def test_number_of_mammals(self):
        number_of_mammals = self.another_expedition.how_many_mammals_caught()
        self.assertEquals(number_of_mammals, 3)

    def test_team_points(self):
        '''Takes a team_letter and returns matching trap locations
        with letter'''
        team_a = self.another_expedition.team_points('A')
        self.assertEquals(team_a[0].team_letter, 'A')
        team_b = self.another_expedition.team_points('B')
        self.assertEquals(team_b[0].team_letter, 'B')
        team_c = self.another_expedition.team_points('C')
        self.assertEquals(team_c[0].team_letter, 'C')

    def test_end_minute_string(self):
        self.new_expedition = Expedition(field_notes="some field notes here")
        self.new_expedition.save()
        end_minute_string = self.new_expedition.end_minute_string()
        self.assertIsNotNone(end_minute_string)
        self.assertEquals(
            end_minute_string,
            "%02d" % self.new_expedition.end_date_of_expedition.minute)

    def test_end_hour_string(self):
        self.new_expedition = Expedition(field_notes="some field notes here")
        self.new_expedition.save()
        end_hour_string = self.new_expedition.end_hour_string()
        self.assertIsNotNone(end_hour_string)
        self.assertEquals(
            end_hour_string,
            "%02d" % self.new_expedition.end_date_of_expedition.hour)

    def test_expedition_set_time_from_strings(self):
        # not sure how to check actual contents of the time,
        # keeps giving type errors
        self.another_expedition.set_end_time_from_strings("5", "45")
        self.assertIsNotNone(self.another_expedition.end_date_of_expedition)

    # Now test TrapLocation methods
    def test_points_trap_location(self):
        self.trap_4.set_suggested_lat_long([4, 5])
        self.trap_4.set_actual_lat_long([6, 7])
        self.trap_4.save()

        actual_lat = self.trap_4.actual_lat()
        actual_lon = self.trap_4.actual_lon()
        self.assertEquals(actual_lat, 6)
        self.assertEquals(actual_lon, 7)

        suggested_lon = self.trap_4.suggested_lon()
        suggested_lat = self.trap_4.suggested_lat()
        self.assertEquals(suggested_lat, 4)
        self.assertEquals(suggested_lon, 5)

    def test_points_trap_location_when_none(self):
        self.assertIsNone(self.time_trap.suggested_lat())
        self.assertIsNone(self.time_trap.suggested_lon())
        self.assertIsNone(self.time_trap.actual_lat())
        self.assertIsNone(self.time_trap.actual_lon())

    def test_trap_location_unicode(self):
        self.assertEquals(unicode(self.trap_4), self.trap_4.gps_coords())

    def test_trap_location_suggested_gps_coords(self):
        self.assertEquals(
            self.trap_4.suggested_gps_coords(), "%s, %s" %
            (self.trap_4.suggested_NSlat(), self.trap_4.suggested_EWlon()))

    def test_trap_location_actual_gps_coords(self):
        self.assertEquals(
            self.trap_4.actual_gps_coords(), "%s, %s" %
            (self.trap_4.actual_NSlat(), self.trap_4.actual_EWlon()))

    def test_trap_location_suggested_NSlat_EWlon_positive_values(self):
        self.trap_4.set_suggested_lat_long([4, 5])
        self.trap_4.save()
        self.assertEquals(self.trap_4.suggested_NSlat(),
                          '%0.5F N' % abs(self.trap_4.suggested_lat()))
        self.assertEquals(self.trap_4.suggested_EWlon(),
                          '%0.5F E' % abs(self.trap_4.suggested_lon()))

    def test_trap_location_suggested_NSlat_EWlon_negative_values(self):
        self.trap_4.set_suggested_lat_long([-3, -4])
        self.trap_4.save()

        self.assertEquals(self.trap_4.suggested_NSlat(),
                          '%0.5F S' % abs(self.trap_4.suggested_lat()))
        self.assertEquals(self.trap_4.suggested_EWlon(),
                          '%0.5F W' % abs(self.trap_4.suggested_lon()))

    def test_trap_location_suggested_NSlat_EWlon_None(self):
        self.assertIsNone(self.time_trap.suggested_lat())
        self.assertIsNone(self.time_trap.suggested_lon())

    def test_trap_location_actual_NSlat_EWlon_positve_values(self):
        self.trap_4.set_actual_lat_long([4, 5])
        self.trap_4.save()
        self.assertEquals(self.trap_4.actual_NSlat(),
                          '%0.5F N' % abs(self.trap_4.actual_lat()))
        self.assertEquals(self.trap_4.actual_EWlon(),
                          '%0.5F E' % abs(self.trap_4.actual_lon()))

    def test_trap_location_actual_NSlat_EWlon_negative_values(self):
        self.trap_4.set_actual_lat_long([-3, -4])
        self.trap_4.save()

        self.assertEquals(self.trap_4.actual_NSlat(),
                          '%0.5F S' % abs(self.trap_4.actual_lat()))
        self.assertEquals(self.trap_4.actual_EWlon(),
                          '%0.5F W' % abs(self.trap_4.actual_lon()))

    def test_trap_location_actual_NSlat_EWlon_None(self):
        self.assertIsNone(self.time_trap.actual_lat())
        self.assertIsNone(self.time_trap.actual_lon())

    def test_trap_location_school(self):
        self.school = School(name="school",
                             address="school address",
                             contact_1_name="contact 1 for school",
                             contact_1_phone="000-000-0000",
                             contact_1_email="*****@*****.**",
                             contact_2_name="contact 2 for school",
                             contact_2_phone="111-111-1111",
                             contact_2_email="*****@*****.**",
                             notes="this student has appropriate information")
        self.school.save()
        self.another_expedition.school = self.school
        self.assertIsNotNone(self.trap_4.school_if_any())
        self.assertEquals(self.trap_4.school_if_any(), "school")
        self.assertIsNone(self.time_trap.school_if_any())

    def test_sightings_date_for_solr(self):
        self.new_sighting = Sighting(species=self.species, date=datetime.now())
        self.new_sighting.save()
        self.assertIsNotNone(self.new_sighting.date_for_solr())

    def tearDown(self):
        self.sighting.delete()
        self.expedition.delete()
        self.trap_location.delete()
        self.timed_expedition.delete()
        self.time_trap.delete()
예제 #12
0
파일: views.py 프로젝트: coati-00/blackrock
def process_save_team_form(request):
    if request.method != 'POST':
        return HttpResponseRedirect('/mammals/all_expeditions/')

    rp = request.POST
    expedition_id = rp['expedition_id']
    exp = Expedition.objects.get(id=expedition_id)
    team_letter = rp['team_letter']
    the_team_points = exp.team_points(team_letter)

    form_map = {
        'habitat': 'habitat_id', 'bait': 'bait_id', 'trap_type': 'trap_type_id'
    }
    form_map_booleans = {
        'whether_a_trap_was_set_here': 'whether_a_trap_was_set_here',
        'bait_still_there': 'bait_still_there'
    }

    for point in the_team_points:
        if 'student_names' in rp:
            point.student_names = rp['student_names']
            point.save()

        for the_key, thing_to_update in form_map.iteritems():
            rp_key = '%s_%d' % (the_key, point.id)
            if rp_key in rp and rp[rp_key] != 'None':
                setattr(point, '%s' % thing_to_update, rp[rp_key])
                point.save()
        for the_key, thing_to_update in form_map_booleans.iteritems():
            rp_key = '%s_%d' % (the_key, point.id)
            if rp_key in rp and rp[rp_key] != 'None':
                setattr(point, '%s' %
                        thing_to_update, (rp[rp_key] == 'True'))
                point.save()

        rp_key = '%s_%d' % ('understory', point.id)
        if rp_key in rp and rp[rp_key] != 'None':
            point.understory = rp[rp_key]
            point.save()

        rp_key = '%s_%d' % ('notes_about_location', point.id)
        if rp_key in rp and rp[rp_key] != 'None':
            point.notes_about_location = rp[rp_key]
            point.save()

        # Deal with animals:
        animal_key = 'animal_%d' % (point.id)
        if animal_key in rp and rp[animal_key] != 'None':
            species_id = int(rp[animal_key])
            species = Species.objects.get(id=species_id)

            # TODO (icing ) here we assume that the animal has never been
            # trapped before.
            animal_never_trapped_before = True
            if animal_never_trapped_before:
                animal = Animal()
                animal.species = species
                animal.save()
            else:
                # Note, would be nice to have a foreign key to another Animal
                # denoting that this Animal is the same actual organism as the
                # other Animal, but recaptured at a later date and
                # aidentified by the same tag.
                # animal = find_already_tagged_animal_in_the_database_somehow()
                pass

            point.animal = animal
            point.save()
            animal.save()

        # Deal with actual latitude and longitude:
        # The burden of providing good data here rests on the front end.
        # If the actual lat and lon don't meet our data standards, we're simply
        # not going to use them.
        # 1) Do they both exist?
        # 2) Are they both accurate to 5 decimals?
        # 3) Are they within a certain distance of the original lat and lon (no
        # interest in points in another country.
        correcting_lat_lon = False
        match_string = '(\-)?(\d){2}\.(\d){5}'

        # if your coordinate string doesn't match the above, you have a nice
        # day.
        lat_key = 'actual_lat_%d' % point.id
        lon_key = 'actual_lon_%d' % point.id

        max_diff = 250.0  # meters
        min_diff = 1.0  # meters

        correcting_lat_lon = True

        if correcting_lat_lon and lat_key not in rp:
            correcting_lat_lon = False
        if correcting_lat_lon and lon_key not in rp:
            correcting_lat_lon = False
        if correcting_lat_lon and match(match_string, rp[lat_key]) is None:
            correcting_lat_lon = False
        if correcting_lat_lon and match(match_string, rp[lon_key]) is None:
            correcting_lat_lon = False

        if correcting_lat_lon:
            diff_lat = point.actual_lat() - float(rp[lat_key])
            diff_lon = point.actual_lon() - float(rp[lon_key])
            distance_to_corrected_point_in_meters = hypotenuse(
                *to_meters(diff_lat, diff_lon))
            if distance_to_corrected_point_in_meters > max_diff:
                correcting_lat_lon = False
                # distance_to_corrected_point_in_meters
        if (correcting_lat_lon and
                distance_to_corrected_point_in_meters < min_diff):
            correcting_lat_lon = False
            # distance_to_corrected_point_in_meters
        if correcting_lat_lon:
            point.set_actual_lat_long(
                [float(rp[lat_key]), float(rp[lon_key])])
            point.save()