Ejemplo n.º 1
0
  def test_build_message_invalid_implementation_field(self):

    """ Test `build_message` with an invalid explicit implementation field """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int, {'field': 'NoSuchField'}

    with self.assertRaises(ValueError):
      protorpc.build_message(SimpleModel)
Ejemplo n.º 2
0
  def test_build_message_bogus_explicit_field(self):

    """ Test `build_message` with a bogus field value """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      color = basestring, {'field': 5.5}

    with self.assertRaises(TypeError):
      protorpc.build_message(SimpleModel)
Ejemplo n.º 3
0
  def test_build_message_required(self):

    """ Test `build_message` with a required property """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int, {'required': True}

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'integer')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi')
    message = message_class(string='hi')

    assert _model.string == message.string
    assert _model.integer == message.integer

    with self.assertRaises(exceptions.PropertyRequired):
      _model.put()

    with self.assertRaises(messages.ValidationError):
      message.check_initialized()
Ejemplo n.º 4
0
  def test_build_message_hook(self):

    """ Test `build_message` with a target object hook """

    class SomeProperty(model.Property):

      """ Simple property with __message__ hook """

      _basetype = basestring

      @classmethod
      def __message__(cls, *args, **kwargs):

        """ Return an IntegerField implementation... """

        return messages.IntegerField(*args, **kwargs)

    class SimpleModel(model.Model):

      """ Simple model message """

      string = SomeProperty

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='5')  # it's a basestring...
    message = message_class(string=5)  # jk its an int! lol

    assert int(_model.string) == message.string
Ejemplo n.º 5
0
  def test_build_message_key(self):

    """ Test `build_message` with a `Key` property """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int
      ref = model.Key

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'integer')
    assert hasattr(message_class, 'ref')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi', integer=5, ref=model.Key('hi', 1))
    message = message_class(string='hi', integer=5, ref=model.Key('hi', 1).to_message())
    _msg_from_obj = _model.to_message()

    assert _model.string == message.string
    assert _model.integer == message.integer
    assert _model.ref.urlsafe() == message.ref.encoded
    assert _msg_from_obj.ref.encoded == _model.ref.urlsafe()
    assert _msg_from_obj.ref.id == 1
Ejemplo n.º 6
0
  def test_build_message_variant_vanilla_model(self):

    """ Test `build_message` with a variant property (by vanilla `Model`) """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int
      data = model.Model

    some_model = SimpleModel(string='hithere')
    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'integer')
    assert hasattr(message_class, 'data')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi', integer=5, data=some_model)
    message = message_class(string='hi', integer=5, data=some_model.to_dict())

    assert _model.string == message.string
    assert _model.integer == message.integer
    assert _model.data.string == message.data['string']
Ejemplo n.º 7
0
  def test_build_message_variant(self):

    """ Test `build_message` with a variant property """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int
      data = dict

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'integer')
    assert hasattr(message_class, 'data')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi', integer=5, data={'hi': 'sup'})
    message = message_class(string='hi', integer=5, data={'hi': 'sup'})

    assert _model.string == message.string
    assert _model.integer == message.integer
    assert _model.data['hi'] == message.data['hi']
Ejemplo n.º 8
0
  def test_build_message_explicit_field_args_kwargs(self):

    """ Test `build_message` with an implementation of field args + kwargs """


    class SimpleEnum(messages.Enum):

      """ Enumerates colors! """

      RED = 0x0
      BLUE = 0x1
      GREEN = 0x2


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      color = basestring, {
        'field': ('EnumField', (SimpleEnum,), {'default': SimpleEnum.RED})}

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'color')
    assert message_class.color.type is SimpleEnum
    assert message_class().color is SimpleEnum.RED
Ejemplo n.º 9
0
  def test_build_message_with_enum(self):

    """ Test `build_message` with a message that contains an enum """


    class Color(struct.BidirectionalEnum):

      """ Sample enumeration of a bunch of colors. """

      BLUE = 0x0
      RED = 0x1
      GREEN = 0x2


    class SomeModel(model.Model):

      """ Something involving colors. """

      color = Color
      name = str

    message_class = protorpc.build_message(SomeModel)

    assert hasattr(message_class, 'color')
    assert hasattr(message_class, 'name')
    assert message_class.color.type.BLUE is Color.BLUE
Ejemplo n.º 10
0
  def test_build_message_repeated(self):

    """ Test `build_message` with a repeated property """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int, {'repeated': True}

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'integer')
    assert message_class.integer.repeated is True
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi', integer=[1, 2, 3])
    message = message_class(string='hi', integer=[1, 2, 3])

    assert _model.string == message.string
    assert type(_model.integer) is list
    assert type(message.integer) is messages.FieldList
    assert len(_model.integer) == 3 and len(message.integer) == 3
Ejemplo n.º 11
0
  def test_build_message_default(self):

    """ Test `build_message` with a property that has a default value """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int, {'default': 10}

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'integer')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi')
    message = message_class(string='hi')

    assert _model.string == message.string
    assert _model.integer == message.integer
Ejemplo n.º 12
0
  def test_build_message(self):

    """ Test `build_message` with a basic `Model` """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'integer')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi', integer=5)
    message = message_class(string='hi', integer=5)

    assert _model.string == message.string
    assert _model.integer == message.integer
Ejemplo n.º 13
0
  def test_build_message_submodel(self):

    """ Test `build_message` with an embedded submodel """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = int


    class SimpleContainer(model.Model):

      """ Simple container message """

      model = SimpleModel

    message_class = protorpc.build_message(SimpleContainer)

    assert hasattr(message_class, 'model')
    assert message_class.__name__ == SimpleContainer.kind()
    assert message_class.model.message_type.__name__ == SimpleModel.kind()
Ejemplo n.º 14
0
  def test_build_message_skip_field(self):

    """ Test `build_message` with an indication to skip a field """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = float, {'field': False}

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert not hasattr(message_class, 'integer')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi', integer=5.5)
    message = message_class(string='hi')

    assert _model.string == message.string
    with self.assertRaises(AttributeError):
      message.integer
Ejemplo n.º 15
0
  def test_build_message_explicit_implementation_field(self):

    """ Test `build_message` with a valid explicit implementation field """


    class SimpleModel(model.Model):

      """ Simple model message """

      string = basestring
      integer = float, {'field': 'IntegerField'}

    message_class = protorpc.build_message(SimpleModel)

    assert hasattr(message_class, 'string')
    assert hasattr(message_class, 'integer')
    assert message_class.__name__ == SimpleModel.kind()

    _model = SimpleModel(string='hi', integer=5.5)
    message = message_class(string='hi', integer=5)

    assert _model.string == message.string
    assert isinstance(_model.integer, float)
    assert isinstance(message.integer, int)