コード例 #1
0
    def test_it_bails_out_when_no_item_is_found(self):
        fs = self.mox.CreateMock(DataStoreFS)
        ds = DataStore(fs)
        fs.listfiles('my-id').AndReturn([
            os.path.join('my-id', 'readme.txt')
        ])
        self.mox.ReplayAll()

        self.assertRaises(DataStoreException, ds.get, 'my-id')
        self.mox.VerifyAll()
コード例 #2
0
    def test_it_fails_when_two_concurrent_puts_happen(self):
        fs = self.mox.CreateMock(DataStoreFS)
        ds = DataStore(fs)

        fp = os.path.join('my-id', 'item-32.json')

        fs.open_new_file(fp).AndReturn(closing(BytesIO()))
        fs.open_new_file(fp).AndRaise(FileAlreadyExistsException('file already exists'))

        self.mox.ReplayAll()

        ds.put('item', 'my-id', dict(name='hello', version=31))
        self.assertRaises(
            ConcurrentModificationException,
            ds.put,
            'item',
            'my-id',
            dict(name='hello', version=31)
        )
        self.mox.VerifyAll()
コード例 #3
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()
コード例 #4
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()
コード例 #5
0
    def test_it_bails_out_when_item_cannot_be_read(self):
        fs = self.mox.CreateMock(DataStoreFS)
        ds = DataStore(fs)
        fs.listfiles('my-id').AndReturn([
            os.path.join('my-id', 'item-0.json')
        ])
        fs.open_for_reading(os.path.join('my-id', 'item-0.txt')).AndRaise(
            Exception()
        )
        self.mox.ReplayAll()

        self.assertRaises(DataStoreException, ds.get, 'my-id')
        self.mox.VerifyAll()
コード例 #6
0
    def test_it_can_list_all_ids(self):
        fs = self.mox.CreateMock(DataStoreFS)
        ds = DataStore(fs)

        items = [
            os.path.join('item1', 'item-1.json'),
            os.path.join('item2', 'item-5.json')
        ]

        fs.listdirs().AndReturn(['__temp', 'item1', 'item2'])
        fs.listfiles('item1').AndReturn([items[0]])
        fs.open_for_reading(items[0]).AndReturn(
            closing(BytesIO('{"name":"a"}'))
        )
        fs.listfiles('item2').AndReturn([items[1]])
        fs.open_for_reading(items[1]).AndReturn(
            closing(BytesIO('{"name":"b"}'))
        )
        self.mox.ReplayAll()

        self.assertEquals(set(['item1', 'item2']), set(ds.all_ids()))

        self.mox.VerifyAll()