def testShowForm(self):
    self.mox.StubOutWithMock(base.PageHandler, 'ShowRaw')
    self.mox.StubOutWithMock(entity, '_GetGeometriesDescription')
    layer = model.Layer(name='a', world='earth')
    layer.put()
    entity1 = model.Entity(layer=layer, name='b', field_c='d')
    entity1.put().id()
    entity2 = model.Entity(layer=layer, name='e', field_f='g')
    entity2.put().id()
    geometries1 = [{'type': 'x', 'value': 'y'}, {'type': 'z', 'u': 'v', 'w': 5}]
    geometries2 = []
    handler = entity.EntityHandler()

    entity._GetGeometriesDescription(mox.IgnoreArg()).AndReturn(
        geometries1)
    entity._GetGeometriesDescription(mox.IgnoreArg()).AndReturn(
        geometries2)

    self.mox.ReplayAll()
    result = handler.ShowForm(layer)
    self.assertEqual(result.keys(), ['entities'])
    self.assertEqual(len(result['entities']), 2)
    self.assertEqual(result['entities'][0].geometry_objects, [{
        'type': 'x',
        'fields': json.dumps({'value': 'y'})
    }, {
        'type': 'z',
        'fields': json.dumps({'u': 'v', 'w': 5})
    }])
    self.assertEqual(result['entities'][1].geometry_objects, None)
  def testGetGeometriesDescription(self):
    layer = model.Layer(name='a', world='earth')
    layer.put()
    resource = model.Resource(layer=layer, type='model', external_url='/there',
                              filename='test')
    resource_id = resource.put().id()
    entity_object = model.Entity(layer=layer, name='b')
    entity_object.put()
    polygon = model.Polygon(outer_points=[db.GeoPt(12, 34), db.GeoPt(56, 78)],
                            parent=entity_object)
    polygon_id = polygon.put().id()
    model_object = model.Model(model=resource, location=db.GeoPt(90, 17),
                               altitude=35.0, altitude_mode='absolute',
                               parent=entity_object)
    model_id = model_object.put().id()
    entity_object.geometries = [polygon_id, model_id]
    entity_object.put().id()

    self.assertEqual(entity._GetGeometriesDescription(entity_object), [
        {'type': 'Polygon', 'outer_points': [[12.0, 34.0], [56.0, 78.0]],
         'extrude': None, 'altitude_mode': None, 'inner_altitudes': [],
         'outer_altitudes': [], 'inner_points': [], 'tessellate': None},
        {'type': 'Model', 'model': resource_id, 'location': [90.0, 17.0],
         'resource_alias_sources': [], 'resource_alias_targets': [],
         'tilt': None, 'heading': None, 'roll': None, 'altitude': 35.0,
         'altitude_mode': u'absolute', 'scale_x': None, 'scale_y': None,
         'scale_z': None}
    ])
  def testShowRaw(self):
    self.mox.StubOutWithMock(base.PageHandler, 'ShowRaw')
    self.mox.StubOutWithMock(entity, '_GetGeometriesDescription')
    layer = model.Layer(name='a', world='earth')
    layer.put()
    entity_object = model.Entity(layer=layer, name='b', field_c='d')
    entity_id = entity_object.put().id()
    dummy_geometries = object()
    handler = entity.EntityHandler()
    handler.request = {'id': str(entity_id)}

    entity._GetGeometriesDescription(mox.IgnoreArg()).AndReturn(
        dummy_geometries)
    base.PageHandler.ShowRaw(handler, layer, field_c='d',
                             geometries=dummy_geometries)

    self.mox.ReplayAll()
    handler.ShowRaw(layer)