Example #1
0
    def testRemoved(self):
        """Removed should be items in the second set
        that are not in the first"""

        modelOne = models.SensorType(id=1, name="foo", units="Co2")
        modelTwo = models.RoomType(id=1, name="Bedroom")
        modelThree = models.SensorType(id=2, name="bar")
        modelFour = models.RoomType(id=2, name="Bathroom")

        firstDict = {
            1: modelOne,
            2: modelTwo,
            3: modelThree,
        }

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        dd = dictdiff.DictDiff(firstDict, secondDict)

        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        testSet = set([4])

        self.assertEqual(added, emptySet)
        self.assertEqual(removed, testSet)
        self.assertEqual(changed, emptySet)
Example #2
0
    def testNEQ(self):
        item1 = models.RoomType(id=1, name="Test Room")
        item2 = models.RoomType(id=1, name="Test Room")

        self.assertEqual(item1, item2)

        item2.name = "FOO"
        self.assertNotEqual(item1, item2)
        self.assertReallyNotEqual(item1, item2)
Example #3
0
    def testChangedObject(self):
        """Items whose value differes between keys"""
        modelOne = models.SensorType(id=1, name="foo", units="Co2")
        modelTwo = models.RoomType(id=1, name="Bedroom")
        modelThree = models.SensorType(id=2, name="bar")

        #RoomType eqality is based on the name not Id
        #Thus these two models should be the same
        modelFour = models.RoomType(id=2, name="Bathroom")
        modelFive = models.RoomType(id=1, name="Bathroom")

        self.assertEqual(modelFour, modelFive)

        #So for this first test we expect that there will be NO
        #Unchanged items.
        firstDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFive}

        dd = dictdiff.DictDiff(firstDict, secondDict)

        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        testSet = set([4])

        self.assertEqual(added, emptySet)
        self.assertEqual(removed, emptySet)
        self.assertEqual(changed, emptySet)

        #However lets run that again when the objects do not come out
        #Equal

        modelFive = models.RoomType(id=1, name="BathroomA")
        self.assertNotEqual(modelFour, modelFive)

        firstDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFive}

        dd = dictdiff.DictDiff(firstDict, secondDict)

        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        testSet = set([4])

        self.assertEqual(added, emptySet)
        self.assertEqual(removed, emptySet)
        self.assertEqual(changed, testSet)
Example #4
0
    def testEq(self):
        """Test for Equality"""
        item1 = models.RoomType(id=1, name="Test Room")
        item2 = models.RoomType(id=1, name="Test Room")

        self.assertEqual(item1, item2)
        self.assertReallyEqual(item1, item2)

        #Not massivly botherered about Id at the moment
        item2.id = 5
        self.assertEqual(item1, item2)
        self.assertReallyEqual(item1, item2)
Example #5
0
    def testCmp(self):
        """Test Compaison function

        (actually __lt__ for Py3K Comat)"""

        item1 = models.RoomType(id=1, name="Test Room")
        item2 = models.RoomType(id=1, name="Test Room")

        self.assertEqual(item1, item2)

        #Order On Name
        item2.name = "A_Test"
        self.assertGreater(item1, item2)

        item2.name = "Z_Test"
        self.assertLess(item1, item2)
Example #6
0
    def testEqual(self):

        modelOne = models.SensorType(id=1, name="foo", units="Co2")
        modelTwo = models.RoomType(id=1, name="Bedroom")
        modelThree = models.SensorType(id=2, name="bar")
        modelFour = models.RoomType(id=2, name="Bathroom")

        firstDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        dd = dictdiff.DictDiff(firstDict, secondDict)
        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        self.assertEqual(added, emptySet)
        self.assertEqual(removed, emptySet)
        self.assertEqual(changed, emptySet)
Example #7
0
    def testChanged(self):
        """Items whose value differes between keys"""
        modelOne = models.SensorType(id=1, name="foo", units="Co2")
        modelTwo = models.RoomType(id=1, name="Bedroom")
        modelThree = models.SensorType(id=2, name="bar")
        modelFour = models.RoomType(id=2, name="Bathroom")

        firstDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelThree}

        dd = dictdiff.DictDiff(firstDict, secondDict)

        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        testSet = set([4])

        self.assertEqual(added, emptySet)
        self.assertEqual(removed, emptySet)
        self.assertEqual(changed, testSet)
Example #8
0
 def _serialobj(self):
     """Helper Method to provde an object to serialise"""
     theItem = models.RoomType(id=1, name="Test Room")
     return theItem
Example #9
0
    def test_sync_roomtypes(self):
        """Does the sync_roomtypes() code work

        #Houses should have three types of behaviour.

        1) If nothing has changed then we want to leave the items as is
        2) If there are room on the local that are not on the remote:
              we upload them
        3) If there are rooms on the remote that are not on the local:
              they get downloaded.

        However, there may be a difference in roomIds
        (this is stored as a mapping)
        """

        #And we also want to make sure the remote has what we expect
        rurl = "{0}roomtype/".format(RESTURL)

        #First makesure nothing is added or taken away
        self.assertTrue(self.pusher.sync_roomtypes())

        session = self.Session()
        qry = session.query(models.RoomType)
        self.assertEqual(qry.count(), 4)

        #So Lets add a local room type
        theroom = models.RoomType(
            id=5,
            name="Testing Room",
        )
        session.add(theroom)
        session.flush()
        session.commit()
        session.close()

        session = self.Session()
        qry = session.query(models.RoomType)
        self.assertEqual(qry.count(), 5)
        self.assertTrue(self.pusher.sync_roomtypes())
        #See if it has appeared
        qry = requests.get(rurl)
        self.assertEqual(len(qry.json()), 5)
        self.assertEqual(qry.json()[4], {
            "__table__": "RoomType",
            "name": "Testing Room",
            "id": 5
        })

        #Then add one to the remote side of things
        theroom = models.RoomType(id=10, name="More Testing")
        requests.post(rurl, data=theroom.json())
        qry = requests.get(rurl)
        #self.assertEqual(len(qry.json()),6)
        session.close()

        self.assertTrue(self.pusher.sync_roomtypes())

        session = self.Session()
        #We should now have a room type with a different Id
        qry = session.query(
            models.RoomType).filter_by(name="More Testing").first()
        self.assertTrue(qry)
        self.assertEquals(qry.id, 6)

        #We need to also make sure that the mapping is correct
        mappings = self.pusher.mappedRoomTypes
        #Should be dict of {remote : local}
        thedict = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 10: 6}
        self.assertEqual(mappings, thedict)

        # ------  Clean up after ourselves ----------
        self.pusher.mappedRoomTypes = {}