def testPrepareLayerForBakingSuccess(self):
    self.mox.StubOutWithMock(taskqueue, 'add')
    self.mox.StubOutWithMock(baker, '_GetBakerURL')
    mock_divisions = [self.mox.CreateMock(model.Division) for _ in xrange(2)]
    mock_division_query = self.mox.CreateMockAnything()
    mock_entity_query = self.mox.CreateMockAnything()
    mock_entities = [self.mox.CreateMock(model.Entity) for _ in xrange(2)]
    mock_entities[0].baked = True
    mock_entities[1].baked = True
    mock_layer = self.mox.CreateMockAnything()
    mock_layer.division_set = mock_division_query
    mock_layer.entity_set = mock_entity_query
    dummy_url = object()
    dummy_division_cursor = object()
    dummy_entity_cursor = object()

    mock_division_query.fetch(1000).AndReturn(mock_divisions[:1])
    mock_divisions[0].delete()
    mock_division_query.cursor().AndReturn(dummy_division_cursor)
    mock_division_query.with_cursor(dummy_division_cursor).AndReturn(
        mock_division_query)
    mock_division_query.fetch(1000).AndReturn(mock_divisions[1:])
    mock_divisions[1].delete()
    mock_division_query.cursor().AndReturn(dummy_division_cursor)
    mock_division_query.with_cursor(dummy_division_cursor).AndReturn(
        mock_division_query)
    mock_division_query.fetch(1000).AndReturn([])

    mock_entity_query.filter('baked', True).AndReturn(mock_entity_query)
    mock_entity_query.fetch(1000).AndReturn(mock_entities)
    mock_entities[0].put()
    mock_entities[1].put()
    mock_entity_query.cursor().AndReturn(dummy_entity_cursor)
    mock_entity_query.with_cursor(dummy_entity_cursor).AndReturn(
        mock_entity_query)
    mock_entity_query.fetch(1000).AndReturn([])

    baker._GetBakerURL(mock_layer).AndReturn(dummy_url)
    baker._GetBakerURL(mock_layer).AndReturn(dummy_url)
    taskqueue.add(url=dummy_url, params={
        'stage': 'subdivide',
        'north': 90,
        'south': -90,
        'east': 180,
        'west': -180
    })
    taskqueue.add(url=dummy_url, params={'stage': 'monitor'},
                  countdown=settings.BAKER_MONITOR_DELAY)

    self.mox.ReplayAll()

    baker._PrepareLayerForBaking(mock_layer)
    self.assertEqual(mock_entities[0].baked, None)
    self.assertEqual(mock_entities[1].baked, None)
  def testCreateSuccess(self):
    self.mox.StubOutWithMock(taskqueue, 'add', use_mock_anything=True)
    self.mox.StubOutWithMock(baker, '_GetBakerURL')
    handler = baker.Baker()
    layer = model.Layer(name='a', world='earth', auto_managed=True)
    layer.put()
    dummy_url = object()

    baker._GetBakerURL(layer).AndReturn(dummy_url)
    taskqueue.add(url=dummy_url, params={'stage': 'setup'})

    self.mox.ReplayAll()

    handler.Create(layer)
  def testPrepareLayerForBakingInterrupt(self):
    self.mox.StubOutWithMock(taskqueue, 'add')
    self.mox.StubOutWithMock(baker, '_GetBakerURL')
    mock_layer = self.mox.CreateMockAnything()
    mock_layer.division_set = self.mox.CreateMockAnything()
    dummy_url = object()

    mock_layer.division_set.fetch(1000).AndRaise(runtime.DeadlineExceededError)
    baker._GetBakerURL(mock_layer).AndReturn(dummy_url)
    taskqueue.add(url=dummy_url, params={'stage': 'setup'})

    self.mox.ReplayAll()

    baker._PrepareLayerForBaking(mock_layer)
  def testCheckIfLayerIsDoneWhenLayerIsNotDone(self):
    self.mox.StubOutWithMock(taskqueue, 'add')
    self.mox.StubOutWithMock(baker, '_GetBakerURL')
    mock_layer = self.mox.CreateMockAnything()
    mock_layer.entity_set = self.mox.CreateMockAnything()
    mock_query = self.mox.CreateMockAnything()
    dummy_url = object()

    mock_layer.entity_set.filter('baked', None).AndReturn(mock_query)
    mock_query.get().AndReturn(object())
    baker._GetBakerURL(mock_layer).AndReturn(dummy_url)
    taskqueue.add(url=dummy_url, params={'stage': 'monitor'},
                  countdown=settings.BAKER_MONITOR_DELAY)

    self.mox.ReplayAll()
    baker._CheckIfLayerIsDone(mock_layer)
 def testGetBakerURL(self):
   layer = model.Layer(name='a', world='earth', auto_managed=True)
   layer_id = layer.put().id()
   self.assertEqual(baker._GetBakerURL(layer), '/baker-update/%d' % layer_id)
   self.assertRaises(AttributeError, baker._GetBakerURL, object())