def test_labels_are_removed(self):
        organization = SuperOrganization.objects.create(name='test-org')

        label_a = Label.objects.create(
            color="red",
            name="label-a",
            super_organization=organization,
        )
        label_b = Label.objects.create(
            color="red",
            name="label-b",
            super_organization=organization,
        )

        bs_1 = SEEDFactory.building_snapshot(
            canonical_building=CanonicalBuilding.objects.create(), )
        bs_2 = SEEDFactory.building_snapshot(
            canonical_building=CanonicalBuilding.objects.create(), )

        bs_1.canonical_building.labels.add(label_a, label_b)
        bs_2.canonical_building.labels.add(label_b)

        # Sanity check
        self.assertTrue(
            bs_1.canonical_building.labels.filter(pk=label_a.pk).exists())
        self.assertTrue(
            bs_1.canonical_building.labels.filter(pk=label_b.pk).exists())
        self.assertFalse(
            bs_2.canonical_building.labels.filter(pk=label_a.pk).exists())
        self.assertTrue(
            bs_2.canonical_building.labels.filter(pk=label_b.pk).exists())

        qs = CanonicalBuilding.objects.all()
        self.assertEqual(qs.count(), 2)

        data = {
            'add_label_ids': [],
            'remove_label_ids': [label_a.pk, label_b.pk],
            'selected_buildings': [],
            'select_all_checkbox': True,
        }

        serializer = UpdateBuildingLabelsSerializer(
            data=data,
            super_organization=organization,
            queryset=qs,
        )
        self.assertTrue(serializer.is_valid(), serializer.errors)

        serializer.save()
        self.assertEqual(qs.count(), 2)

        self.assertFalse(
            bs_1.canonical_building.labels.filter(pk=label_a.pk).exists())
        self.assertFalse(
            bs_1.canonical_building.labels.filter(pk=label_b.pk).exists())
        self.assertFalse(
            bs_2.canonical_building.labels.filter(pk=label_a.pk).exists())
        self.assertFalse(
            bs_2.canonical_building.labels.filter(pk=label_b.pk).exists())
Exemplo n.º 2
0
    def test_seach_active_canonicalbuildings(self):
        """ tests the search_buidlings method used throughout the app for only
            returning active CanonicalBuilding BuildingSnapshot insts.
        """
        # arrange
        NUMBER_ACTIVE = 50
        NUMBER_INACTIVE = 25
        NUMBER_WITHOUT_CANONICAL = 5
        NUMBER_PER_PAGE = 10
        for i in range(NUMBER_ACTIVE):
            cb = CanonicalBuilding(active=True)
            cb.save()
            b = SEEDFactory.building_snapshot(canonical_building=cb)
            cb.canonical_snapshot = b
            cb.save()
            b.super_organization = self.org
            b.save()
        for i in range(NUMBER_INACTIVE):
            cb = CanonicalBuilding(active=False)
            cb.save()
            b = SEEDFactory.building_snapshot(canonical_building=cb)
            cb.canonical_snapshot = b
            cb.save()
            b.super_organization = self.org
            b.save()
        for i in range(NUMBER_WITHOUT_CANONICAL):
            b = SEEDFactory.building_snapshot()
            b.super_organization = self.org
            b.save()
        url = reverse_lazy("seed:search_buildings")
        post_data = {
            'filter_params': {},
            'number_per_page': NUMBER_PER_PAGE,
            'order_by': '',
            'page': 1,
            'q': '',
            'sort_reverse': False,
            'project_id': None,
        }

        # act
        response = self.client.post(
            url,
            content_type='application/json',
            data=json.dumps(post_data)
        )
        json_string = response.content
        data = json.loads(json_string)

        # assert
        self.assertEqual(
            BuildingSnapshot.objects.all().count(),
            NUMBER_ACTIVE + NUMBER_INACTIVE + NUMBER_WITHOUT_CANONICAL
        )
        self.assertEqual(data['status'], 'success')
        self.assertEqual(data['number_matching_search'], NUMBER_ACTIVE)
        self.assertEqual(data['number_returned'], NUMBER_PER_PAGE)
        self.assertEqual(len(data['buildings']), NUMBER_PER_PAGE)
Exemplo n.º 3
0
    def test_labels_are_removed(self):
        organization = SuperOrganization.objects.create(name='test-org')

        label_a = Label.objects.create(
            color="red",
            name="label-a",
            super_organization=organization,
        )
        label_b = Label.objects.create(
            color="red",
            name="label-b",
            super_organization=organization,
        )

        bs_1 = SEEDFactory.building_snapshot(
            canonical_building=CanonicalBuilding.objects.create(),
        )
        bs_2 = SEEDFactory.building_snapshot(
            canonical_building=CanonicalBuilding.objects.create(),
        )

        bs_1.canonical_building.labels.add(label_a, label_b)
        bs_2.canonical_building.labels.add(label_b)

        # Sanity check
        self.assertTrue(bs_1.canonical_building.labels.filter(pk=label_a.pk).exists())
        self.assertTrue(bs_1.canonical_building.labels.filter(pk=label_b.pk).exists())
        self.assertFalse(bs_2.canonical_building.labels.filter(pk=label_a.pk).exists())
        self.assertTrue(bs_2.canonical_building.labels.filter(pk=label_b.pk).exists())

        qs = CanonicalBuilding.objects.all()
        self.assertEqual(qs.count(), 2)

        data = {
            'add_label_ids': [],
            'remove_label_ids': [label_a.pk, label_b.pk],
            'selected_buildings': [],
            'select_all_checkbox': True,
        }

        serializer = UpdateBuildingLabelsSerializer(
            data=data,
            super_organization=organization,
            queryset=qs,
        )
        self.assertTrue(serializer.is_valid(), serializer.errors)

        serializer.save()
        self.assertEqual(qs.count(), 2)

        self.assertFalse(bs_1.canonical_building.labels.filter(pk=label_a.pk).exists())
        self.assertFalse(bs_1.canonical_building.labels.filter(pk=label_b.pk).exists())
        self.assertFalse(bs_2.canonical_building.labels.filter(pk=label_a.pk).exists())
        self.assertFalse(bs_2.canonical_building.labels.filter(pk=label_b.pk).exists())
Exemplo n.º 4
0
    def setUp(self):
        user_details = {
            'username': '******',
            'password': '******',
            'email': '*****@*****.**'
        }
        self.user = User.objects.create_superuser(**user_details)
        self.org = Organization.objects.create()
        OrganizationUser.objects.create(user=self.user, organization=self.org)
        self.client.login(**user_details)

        import_record = ImportRecord.objects.create()
        import_file_1 = ImportFile.objects.create(
            import_record=import_record,
        )
        import_file_1.save()
        import_file_2 = ImportFile.objects.create(
            import_record=import_record,
        )
        import_file_2.save()
        cb = CanonicalBuilding(active=True)
        cb.save()
        parent_1 = SEEDFactory.building_snapshot(
            canonical_building=cb,
            gross_floor_area=None
        )
        cb.canonical_snapshot = parent_1
        cb.save()
        parent_1.super_organization = self.org
        parent_1.import_file = import_file_1
        parent_1.source_type = 2
        parent_1.save()

        cb = CanonicalBuilding(active=True)
        cb.save()
        parent_2 = SEEDFactory.building_snapshot(canonical_building=cb)
        cb.canonical_snapshot = parent_2
        cb.save()
        parent_2.super_organization = self.org
        parent_2.import_file = import_file_2
        parent_2.source_type = 3
        parent_2.save()

        self.import_record = import_record
        self.import_file_1 = import_file_1
        self.import_file_2 = import_file_2
        self.parent_1 = parent_1
        self.parent_2 = parent_2
Exemplo n.º 5
0
    def test_computed_property_is_applied(self):
        organization = SuperOrganization.objects.create(name='test-org')

        label_a = Label.objects.create(
            color="red", name="test_label-a", super_organization=organization,
        )
        label_b = Label.objects.create(
            color="red", name="test_label-b", super_organization=organization,
        )

        bs = SEEDFactory.building_snapshot(
            canonical_building=CanonicalBuilding.objects.create(),
        )
        bs.canonical_building.labels.add(label_a)

        qs = BuildingSnapshot.objects.all()

        serializer = LabelSerializer(
            label_a,
            super_organization=organization,
            building_snapshots=qs,
        )
        self.assertTrue(serializer.data['is_applied'])

        serializer = LabelSerializer(
            label_b,
            super_organization=organization,
            building_snapshots=qs,
        )
        self.assertFalse(serializer.data['is_applied'])
Exemplo n.º 6
0
    def setUp(self):
        user_details = {
            'username': '******',
            'password': '******',
            'email': '*****@*****.**'
        }
        self.user = User.objects.create_user(**user_details)
        self.user.generate_key()
        self.org = Organization.objects.create()
        OrganizationUser.objects.create(user=self.user, organization=self.org)

        cb = CanonicalBuilding(active=True)
        cb.save()
        b = SEEDFactory.building_snapshot(canonical_building=cb,
                                          property_name='ADMIN BUILDING',
                                          address_line_1='100 Admin St')
        cb.canonical_snapshot = b
        cb.save()
        b.super_organization = self.org
        b.save()
        self.building = b

        self.api_url = reverse_lazy('seed:get_building')
        self.params = {
            'building_id': b.pk,
            'organization_id': self.org.pk,
        }
        self.auth_string = '%s:%s' % (self.user.username, self.user.api_key)
Exemplo n.º 7
0
    def setUp(self):
        user_details = {
            'username': '******',
            'password': '******',
            'email': '*****@*****.**'
        }
        self.user = User.objects.create_user(**user_details)
        self.user.generate_key()
        self.org = Organization.objects.create()
        OrganizationUser.objects.create(user=self.user, organization=self.org)

        cb = CanonicalBuilding(active=True)
        cb.save()
        b = SEEDFactory.building_snapshot(canonical_building=cb,
                                          property_name='ADMIN BUILDING',
                                          address_line_1='100 Admin St')
        cb.canonical_snapshot = b
        cb.save()
        b.super_organization = self.org
        b.save()
        self.building = b

        self.api_url = reverse_lazy('api:v1:get_building')
        self.params = {
            'building_id': cb.pk,
            'organization_id': self.org.pk,
        }
        auth_string = base64.urlsafe_b64encode('{}:{}'.format(
            self.user.username, self.user.api_key))
        self.auth_string = 'Basic {}'.format(auth_string)
    def test_computed_property_is_applied(self):
        organization = SuperOrganization.objects.create(name='test-org')

        label_a = Label.objects.create(
            color="red",
            name="test_label-a",
            super_organization=organization,
        )
        label_b = Label.objects.create(
            color="red",
            name="test_label-b",
            super_organization=organization,
        )

        bs = SEEDFactory.building_snapshot(
            canonical_building=CanonicalBuilding.objects.create(), )
        bs.canonical_building.labels.add(label_a)

        qs = BuildingSnapshot.objects.all()

        serializer = LabelSerializer(
            label_a,
            super_organization=organization,
            building_snapshots=qs,
        )
        self.assertTrue(serializer.data['is_applied'])

        serializer = LabelSerializer(
            label_b,
            super_organization=organization,
            building_snapshots=qs,
        )
        self.assertFalse(serializer.data['is_applied'])
Exemplo n.º 9
0
 def setUp(self):
     self.snapshots = []
     for x in range(50):
         cb = CanonicalBuilding()
         cb.save()
         b = SEEDFactory.building_snapshot(canonical_building=cb)
         b.extra_data = {'my new field': 'something extra'}
         b.save()
         self.snapshots.append(b)
Exemplo n.º 10
0
 def setUp(self):
     self.snapshots = []
     for x in range(50):
         cb = CanonicalBuilding()
         cb.save()
         b = SEEDFactory.building_snapshot(canonical_building=cb)
         b.extra_data = {
             'my new field': 'something extra'
         }
         b.save()
         self.snapshots.append(b)
 def setUp(self):
     user_details = {
         'username': '******',
         'password': '******',
         'email': '*****@*****.**',
         'first_name': 'Johnny',
         'last_name': 'Energy',
     }
     self.user = User.objects.create_user(**user_details)
     self.org = Organization.objects.create(name='my org')
     self.org.add_member(self.user)
     self.client.login(**user_details)
     self.fake_request = FakeRequest(user=self.user)
     # arrange
     self.NUMBER_ACTIVE = 50
     NUMBER_INACTIVE = 25
     NUMBER_WITHOUT_CANONICAL = 5
     for i in range(self.NUMBER_ACTIVE):
         cb = CanonicalBuilding(active=True)
         cb.save()
         b = SEEDFactory.building_snapshot(canonical_building=cb)
         cb.canonical_snapshot = b
         cb.save()
         b.super_organization = self.org
         b.save()
     for i in range(NUMBER_INACTIVE):
         cb = CanonicalBuilding(active=False)
         cb.save()
         b = SEEDFactory.building_snapshot(canonical_building=cb)
         cb.canonical_snapshot = b
         cb.save()
         b.super_organization = self.org
         b.save()
     for i in range(NUMBER_WITHOUT_CANONICAL):
         b = SEEDFactory.building_snapshot()
         b.super_organization = self.org
         b.save()
Exemplo n.º 12
0
 def setUp(self):
     user_details = {
         'username': '******',
         'password': '******',
         'email': '*****@*****.**',
         'first_name': 'Johnny',
         'last_name': 'Energy',
     }
     self.user = User.objects.create_user(**user_details)
     self.org = Organization.objects.create(name='my org')
     self.org.add_member(self.user)
     self.client.login(**user_details)
     self.fake_request = FakeRequest(user=self.user)
     # arrange
     self.NUMBER_ACTIVE = 50
     NUMBER_INACTIVE = 25
     NUMBER_WITHOUT_CANONICAL = 5
     for i in range(self.NUMBER_ACTIVE):
         cb = CanonicalBuilding(active=True)
         cb.save()
         b = SEEDFactory.building_snapshot(canonical_building=cb)
         cb.canonical_snapshot = b
         cb.save()
         b.super_organization = self.org
         b.save()
     for i in range(NUMBER_INACTIVE):
         cb = CanonicalBuilding(active=False)
         cb.save()
         b = SEEDFactory.building_snapshot(canonical_building=cb)
         cb.canonical_snapshot = b
         cb.save()
         b.super_organization = self.org
         b.save()
     for i in range(NUMBER_WITHOUT_CANONICAL):
         b = SEEDFactory.building_snapshot()
         b.super_organization = self.org
         b.save()
Exemplo n.º 13
0
    def _create_buildings(self):
        """
        Create 10 buildings in each child org.

        Also set one shared and one unshared field to a known value.
        """
        for _ in range(10):
            cb = CanonicalBuilding(active=True)
            cb.save()
            b = SEEDFactory.building_snapshot(canonical_building=cb,
                                              property_name='ADMIN BUILDING',
                                              address_line_1='100 Admin St')
            cb.canonical_snapshot = b
            cb.save()
            b.super_organization = self.parent_org
            b.save()
        for _ in range(10):
            cb = CanonicalBuilding(active=True)
            cb.save()
            b = SEEDFactory.building_snapshot(canonical_building=cb,
                                              property_name='ENG BUILDING',
                                              address_line_1='100 Eng St')
            cb.canonical_snapshot = b
            cb.save()
            b.super_organization = self.eng_org
            b.save()
        for _ in range(10):
            cb = CanonicalBuilding(active=True)
            cb.save()
            b = SEEDFactory.building_snapshot(canonical_building=cb,
                                              property_name='DES BUILDING',
                                              address_line_1='100 Des St')
            cb.canonical_snapshot = b
            cb.save()
            b.super_organization = self.des_org
            b.save()
    def generate_buildings(organization, count):
        buildings = []

        for i in range(count):
            tax_lot_id = str(i).zfill(5)
            bs = SEEDFactory.building_snapshot(
                canonical_building=CanonicalBuilding.objects.create(active=True),
                tax_lot_id=tax_lot_id,
                super_organization=organization,
            )
            bs.canonical_building.canonical_snapshot = bs
            bs.canonical_building.save()
            buildings.append(bs)

        return buildings
Exemplo n.º 15
0
    def _create_buildings(self):
        """
        Create 10 buildings in each child org.

        Also set one shared and one unshared field to a known value.
        """
        for _ in range(10):
            cb = CanonicalBuilding(active=True)
            cb.save()
            b = SEEDFactory.building_snapshot(canonical_building=cb,
                                              property_name='ADMIN BUILDING',
                                              address_line_1='100 Admin St')
            cb.canonical_snapshot = b
            cb.save()
            b.super_organization = self.parent_org
            b.save()
        for _ in range(10):
            cb = CanonicalBuilding(active=True)
            cb.save()
            b = SEEDFactory.building_snapshot(canonical_building=cb,
                                              property_name='ENG BUILDING',
                                              address_line_1='100 Eng St')
            cb.canonical_snapshot = b
            cb.save()
            b.super_organization = self.eng_org
            b.save()
        for _ in range(10):
            cb = CanonicalBuilding(active=True)
            cb.save()
            b = SEEDFactory.building_snapshot(canonical_building=cb,
                                              property_name='DES BUILDING',
                                              address_line_1='100 Des St')
            cb.canonical_snapshot = b
            cb.save()
            b.super_organization = self.des_org
            b.save()
Exemplo n.º 16
0
    def generate_buildings(organization, count):
        buildings = []

        for i in range(count):
            tax_lot_id = str(i).zfill(5)
            bs = SEEDFactory.building_snapshot(
                canonical_building=CanonicalBuilding.objects.create(active=True),
                tax_lot_id=tax_lot_id,
                super_organization=organization,
            )
            bs.canonical_building.canonical_snapshot = bs
            bs.canonical_building.save()
            buildings.append(bs)

        return buildings
Exemplo n.º 17
0
 def setUp(self):
     user_details = {
         'username': '******',
         'password': '******',
         'email': '*****@*****.**',
         'first_name': 'Johnny',
         'last_name': 'Energy',
     }
     self.user = User.objects.create_user(**user_details)
     self.org = Organization.objects.create(name='my org')
     self.org.add_member(self.user)
     self.client.login(**user_details)
     self.fake_request = FakeRequest(user=self.user)
     # create BuildingSnapshot and CanonicalBuilding
     self.cb = CanonicalBuilding.objects.create(active=True)
     self.bs = SEEDFactory.building_snapshot(canonical_building=self.cb,
                                             property_name='ADMIN BUILDING',
                                             address_line_1='100 Admin St')
     self.cb.canonical_snapshot = self.bs
     self.cb.save()
     # create AuditLog audit
     self.audit_log = AuditLog.objects.create(
         user=self.user,
         content_object=self.cb,
         audit_type=LOG,
         action='create_building',
         action_response={
             'status': 'success',
             'building_id': self.cb.pk
         },
         action_note='user created a building',
         organization=self.org,
     )
     # create AuditLog note
     self.note_text = 'The building has a wonderfully low EUI'
     self.note = AuditLog.objects.create(
         user=self.user,
         content_object=self.cb,
         audit_type=NOTE,
         action='create_note',
         action_response={'status': 'success'},
         action_note=self.note_text,
         organization=self.org,
     )
Exemplo n.º 18
0
 def setUp(self):
     user_details = {
         'username': '******',
         'password': '******',
         'email': '*****@*****.**',
         'first_name': 'Johnny',
         'last_name': 'Energy',
     }
     self.user = User.objects.create_user(**user_details)
     self.org = Organization.objects.create(name='my org')
     self.org.add_member(self.user)
     self.client.login(**user_details)
     self.fake_request = FakeRequest(user=self.user)
     # create BuildingSnapshot and CanonicalBuilding
     self.cb = CanonicalBuilding.objects.create(active=True)
     self.bs = SEEDFactory.building_snapshot(
         canonical_building=self.cb,
         property_name='ADMIN BUILDING',
         address_line_1='100 Admin St'
     )
     self.cb.canonical_snapshot = self.bs
     self.cb.save()
     # create AuditLog audit
     self.audit_log = AuditLog.objects.create(
         user=self.user,
         content_object=self.cb,
         audit_type=LOG,
         action='create_building',
         action_response={'status': 'success', 'building_id': self.cb.pk},
         action_note='user created a building',
         organization=self.org,
     )
     # create AuditLog note
     self.note_text = 'The building has a wonderfully low EUI'
     self.note = AuditLog.objects.create(
         user=self.user,
         content_object=self.cb,
         audit_type=NOTE,
         action='create_note',
         action_response={'status': 'success'},
         action_note=self.note_text,
         organization=self.org,
     )
Exemplo n.º 19
0
 def setUp(self):
     user_details = {
         "username": "******",
         "password": "******",
         "email": "*****@*****.**",
         "first_name": "Johnny",
         "last_name": "Energy",
     }
     self.user = User.objects.create_user(**user_details)
     self.org = Organization.objects.create(name="my org")
     self.org.add_member(self.user)
     self.client.login(**user_details)
     self.fake_request = FakeRequest(user=self.user)
     # create BuildingSnapshot and CanonicalBuilding
     self.cb = CanonicalBuilding.objects.create(active=True)
     self.bs = SEEDFactory.building_snapshot(
         canonical_building=self.cb, property_name="ADMIN BUILDING", address_line_1="100 Admin St"
     )
     self.cb.canonical_snapshot = self.bs
     self.cb.save()
     # create AuditLog audit
     self.audit_log = AuditLog.objects.create(
         user=self.user,
         content_object=self.cb,
         audit_type=LOG,
         action="create_building",
         action_response={"status": "success", "building_id": self.cb.pk},
         action_note="user created a building",
         organization=self.org,
     )
     # create AuditLog note
     self.note_text = "The building has a wonderfully low EUI"
     self.note = AuditLog.objects.create(
         user=self.user,
         content_object=self.cb,
         audit_type=NOTE,
         action="create_note",
         action_response={"status": "success"},
         action_note=self.note_text,
         organization=self.org,
     )
Exemplo n.º 20
0
    def setUp(self):
        user_details = {"username": "******", "password": "******", "email": "*****@*****.**"}
        self.user = User.objects.create_user(**user_details)
        self.user.generate_key()
        self.org = Organization.objects.create()
        OrganizationUser.objects.create(user=self.user, organization=self.org)

        cb = CanonicalBuilding(active=True)
        cb.save()
        b = SEEDFactory.building_snapshot(
            canonical_building=cb, property_name="ADMIN BUILDING", address_line_1="100 Admin St"
        )
        cb.canonical_snapshot = b
        cb.save()
        b.super_organization = self.org
        b.save()
        self.building = b

        self.api_url = reverse_lazy("seed:get_building")
        self.params = {"building_id": cb.pk, "organization_id": self.org.pk}
        self.auth_string = "%s:%s" % (self.user.username, self.user.api_key)
Exemplo n.º 21
0
 def setUp(self):
     self.snapshots = []
     for x in range(50):
         cb = CanonicalBuilding()
         cb.save()
         self.snapshots.append(SEEDFactory.building_snapshot(canonical_building=cb))