def setUp(self):
     # First, create an instance of the Testbed class.
     self.testbed = testbed.Testbed()
     # Then activate the testbed, which prepares the service stubs for use.
     self.testbed.activate()
     # Next, declare which service stubs you want to use.
     self.testbed.init_datastore_v3_stub()
     self.testbed.init_memcache_stub()
     self.storage = WikiAppengineDataStore()
 def setUp(self):
     # First, create an instance of the Testbed class.
     self.testbed = testbed.Testbed()
     # Then activate the testbed, which prepares the service stubs for use.
     self.testbed.activate()
     # Next, declare which service stubs you want to use.
     self.testbed.init_datastore_v3_stub()
     self.testbed.init_memcache_stub()
     self.storage = WikiAppengineDataStore()
class WikiDataStoreFactory():
    '''
    classdocs
    '''
    storage_implementations = {'appengine': WikiAppengineDataStore()}

    def __init__(self, storage_impl='appengine'):
        '''
        Constructor
        '''
        self.storage = self.storage_implementations[storage_impl]

    def set_storage(self, wiki_storage):
        self.storage = wiki_storage

    def get_storage(self):
        return self.storage
class Test(unittest.TestCase):
    def setUp(self):
        # First, create an instance of the Testbed class.
        self.testbed = testbed.Testbed()
        # Then activate the testbed, which prepares the service stubs for use.
        self.testbed.activate()
        # Next, declare which service stubs you want to use.
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.storage = WikiAppengineDataStore()

    def tearDown(self):
        self.testbed.deactivate()

    def testPut(self):
        data = WikiData(url='Foo', content='Foo blog')
        data.put()
        pass

    def test_save_insert(self):
        b1 = WikiData(url='blog1', content='This is blog1')
        b1a = self.storage.fetch(1)
        #assert not found
        self.assertTrue(b1a == None)
        self.storage.save(b1)
        b1a = self.storage.fetch(1)
        self.assertEquals(
            b1.url, b1a.url, "Wiki " + str(b1) +
            ' was not saved. This was saved instead: ' + str(b1a))
        self.assertEquals(
            b1.content, b1a.content, "Wiki " + str(b1) +
            ' was not saved. This was saved instead: ' + str(b1a))

    def test_save_update(self):
        b3 = WikiData(url='blog1', content='This is blog1')
        #insert
        self.storage.save(b3)
        b3a = self.storage.fetch(1)
        self.assertEquals(
            b3.url, b3a.url, "Wiki " + str(b3) +
            ' was not saved. This was saved instead: ' + str(b3a))
        self.assertEquals(
            b3.content, b3a.content, "Wiki " + str(b3) +
            ' was not saved. This was saved instead: ' + str(b3a))
        #update
        b3a.content = 'This is blog1 #2'
        self.storage.save(b3a)
        b3a2 = self.storage.fetch(1)
        self.assertEquals(
            b3.url, b3a2.url, "Wiki " + str(b3) +
            ' was not saved. This was saved instead: ' + str(b3a))
        self.assertNotEquals(
            b3.content, b3a2.content, "Wiki " + str(b3) +
            ' was not saved. This was saved instead: ' + str(b3a))

    def test_fetch(self):
        b = WikiData(url='blog1', content='This is blog1')
        expected = b.url
        self.storage.save(b)
        b1 = self.storage.fetch(1)
        self.assertEquals(expected, b1.url,
                          "Wiki with id " + str(expected) + ' was not found.')
        #check not found
        b1a = self.storage.fetch(100)
        self.assertTrue(b1a == None)
        pass

    def test_fetchAll(self):
        b1 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2', content='This is blog2')
        self.storage.save(b2)
        expected = 2
        actual = list(self.storage.fetchAll())
        actual_count = len(actual)
        self.assertEquals(
            expected, actual_count, "Wiki count of " + str(expected) +
            ' size was not found. Actual count: ' + str(actual_count))
        print repr(actual)

    def test_fetchByUrl(self):
        b1 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2', content='This is blog2')
        self.storage.save(b2)
        b3 = WikiData(url='blog1', content='This is blog2')
        self.storage.save(b3)
        actual = list(self.storage.fetchByUrl('blog1'))
        self.assertTrue(len(actual) == 2)

    def test_fetchAll_cacheTest(self):
        b1 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2', content='This is blog2')
        self.storage.save(b2)
        b3 = WikiData(url='blog1', content='This is blog2')
        self.storage.save(b3)
        b4 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b4)
        b5 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b5)
        b6 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b6)

        actual_1 = list(self.storage.fetchAll())

        cache_key = FETCH_ALL_CACHE_KEY
        actual_2 = memcache.get(cache_key)

        self.assertEquals(actual_1[0].content, actual_2[0].content)

    def test_fetch_cacheTest(self):
        b1 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2', content='This is blog2')
        self.storage.save(b2)
        b3 = WikiData(url='blog1', content='This is blog2')
        self.storage.save(b3)
        b4 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b4)
        b5 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b5)
        b6 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b6)
        b5_id = b5.key().id()

        actual1 = self.storage.fetch(b5_id)

        cache_key = str(b5_id) + DATA_CACHE_KEY_SUFFIX
        actual2 = memcache.get(cache_key)

        self.assertEquals(actual1.content, actual2.content)

    def test_fetchByUrl_cacheTest(self):
        b1 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2', content='This is blog2')
        self.storage.save(b2)
        b3 = WikiData(url='blog1', content='This is blog2')
        self.storage.save(b3)
        b4 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b4)
        b5 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b5)
        b6 = WikiData(url='blog1', content='This is blog1')
        self.storage.save(b6)

        actual1 = list(self.storage.fetchByUrl('blog1'))

        cache_key = 'blog1' + DATA_CACHE_KEY_SUFFIX
        actual2 = memcache.get(cache_key)

        self.assertEquals(len(actual1), len(actual2))
        self.assertEquals(actual1[0].url, actual2[0].url)
        self.assertEquals(actual1[1].content, actual2[1].content)
class Test(unittest.TestCase):

    def setUp(self):
        # First, create an instance of the Testbed class.
        self.testbed = testbed.Testbed()
        # Then activate the testbed, which prepares the service stubs for use.
        self.testbed.activate()
        # Next, declare which service stubs you want to use.
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.storage = WikiAppengineDataStore()
        
    
    def tearDown(self):
        self.testbed.deactivate()

    def testPut(self):
        data = WikiData(url='Foo',content='Foo blog')
        data.put()
        pass

    def test_save_insert(self):
        b1 = WikiData(url='blog1',content='This is blog1')
        b1a = self.storage.fetch(1)
        #assert not found
        self.assertTrue(b1a == None)
        self.storage.save(b1)
        b1a = self.storage.fetch(1)
        self.assertEquals(b1.url, b1a.url, "Wiki " + str(b1) + ' was not saved. This was saved instead: ' + str(b1a))
        self.assertEquals(b1.content, b1a.content, "Wiki " + str(b1) + ' was not saved. This was saved instead: ' + str(b1a))

    def test_save_update(self):
        b3 = WikiData(url='blog1',content='This is blog1')
        #insert
        self.storage.save(b3)
        b3a = self.storage.fetch(1)
        self.assertEquals(b3.url, b3a.url, "Wiki " + str(b3) + ' was not saved. This was saved instead: ' + str(b3a))
        self.assertEquals(b3.content, b3a.content, "Wiki " + str(b3) + ' was not saved. This was saved instead: ' + str(b3a))
        #update
        b3a.content='This is blog1 #2'
        self.storage.save(b3a)
        b3a2 = self.storage.fetch(1)
        self.assertEquals(b3.url, b3a2.url, "Wiki " + str(b3) + ' was not saved. This was saved instead: ' + str(b3a))
        self.assertNotEquals(b3.content, b3a2.content, "Wiki " + str(b3) + ' was not saved. This was saved instead: ' + str(b3a))

    def test_fetch(self):
        b = WikiData(url='blog1',content='This is blog1')
        expected = b.url 
        self.storage.save(b)
        b1 = self.storage.fetch(1)
        self.assertEquals(expected, b1.url, "Wiki with id " + str(expected) + ' was not found.')
        #check not found
        b1a = self.storage.fetch(100)
        self.assertTrue(b1a == None)
        pass

    def test_fetchAll(self):
        b1 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2',content='This is blog2')
        self.storage.save(b2)
        expected = 2
        actual = list(self.storage.fetchAll())
        actual_count = len(actual)
        self.assertEquals(expected, actual_count, "Wiki count of " + str(expected) + ' size was not found. Actual count: ' + str(actual_count))
        print repr(actual)


    def test_fetchByUrl(self):
        b1 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2',content='This is blog2')
        self.storage.save(b2)
        b3 = WikiData(url='blog1',content='This is blog2')
        self.storage.save(b3)
        actual = list(self.storage.fetchByUrl('blog1'))
        self.assertTrue(len(actual) == 2)

    def test_fetchAll_cacheTest(self):
        b1 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2',content='This is blog2')
        self.storage.save(b2)
        b3 = WikiData(url='blog1',content='This is blog2')
        self.storage.save(b3)
        b4 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b4)
        b5 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b5)
        b6 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b6)
        
        actual_1 = list(self.storage.fetchAll())
        
        cache_key = FETCH_ALL_CACHE_KEY 
        actual_2 = memcache.get(cache_key)
        
        self.assertEquals(actual_1[0].content, actual_2[0].content)
        

    def test_fetch_cacheTest(self):
        b1 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2',content='This is blog2')
        self.storage.save(b2)
        b3 = WikiData(url='blog1',content='This is blog2')
        self.storage.save(b3)
        b4 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b4)
        b5 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b5)
        b6 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b6)
        b5_id = b5.key().id()

        actual1 = self.storage.fetch(b5_id)
        
        cache_key = str(b5_id) + DATA_CACHE_KEY_SUFFIX 
        actual2 = memcache.get(cache_key)

        self.assertEquals(actual1.content, actual2.content)

    def test_fetchByUrl_cacheTest(self):
        b1 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b1)
        b2 = WikiData(url='blog2',content='This is blog2')
        self.storage.save(b2)
        b3 = WikiData(url='blog1',content='This is blog2')
        self.storage.save(b3)
        b4 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b4)
        b5 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b5)
        b6 = WikiData(url='blog1',content='This is blog1')
        self.storage.save(b6)

        actual1 = list(self.storage.fetchByUrl('blog1'))
        
        cache_key = 'blog1' + DATA_CACHE_KEY_SUFFIX 
        actual2 = memcache.get(cache_key)

        self.assertEquals(len(actual1), len(actual2))
        self.assertEquals(actual1[0].url, actual2[0].url)
        self.assertEquals(actual1[1].content, actual2[1].content)