コード例 #1
0
    def test_it_queries_the_filesystem_for_the_latest_version(self):
        fs = self.mox.CreateMock(DataStoreFS)
        ds = DataStore(fs)

        pj = os.path.join
        fs.listfiles('my-id').AndReturn([
            pj('my-id', 'item-0.json'),
            pj('my-id', 'item-15.json'),
            pj('my-id', 'item-1.json'),
            pj('my-id', 'item-6.json'),
            pj('my-id', 'readme.txt'),
        ])
        fs.open_for_reading(os.path.join('my-id', 'item-15.json')).AndReturn(
            closing(BytesIO('{"name":"the_name"}'))
        )
        self.mox.ReplayAll()

        item = ds.get('my-id')
        self.assertEquals(dict(name='the_name', version=15), item)
        self.mox.VerifyAll()
コード例 #2
0
    def test_it_creates_a_new_version_on_put(self):
        fs = self.mox.CreateMock(DataStoreFS)
        def clock_now():
            return datetime(1970, 1, 1)

        ds = DataStore(fs, clock_now)

        first_version = os.path.join('my-id', 'item-0.json')
        fs.listfiles('my-id').AndReturn([
            first_version
        ])
        fs.open_for_reading(first_version).AndReturn(
            closing(BytesIO('{"name":"the name"}'))
        )

        new_version = os.path.join('my-id', 'item-1.json')
        new_content = BytesIO()
        @contextmanager
        def not_closing_content():
            yield new_content

        fs.open_new_file(new_version).AndReturn(
            not_closing_content()
        )
        self.mox.ReplayAll()

        item = ds.get('my-id')
        item['name'] = 'the new name'

        ds.put('item', 'my-id', item)

        self.assertEquals(
            json.loads(new_content.getvalue()),
            dict(
                name='the new name',
                version=1,
                creation_date={ '__datetime__': True, 'iso8601': '19700101T000000' }
            )
        )
        self.mox.VerifyAll()