Ejemplo n.º 1
0
    def test_encode_zero_numeric(self):
        class Pet(Message):
            cuteness: float

        protocol = JSONProtocol(Pet)
        self.assertEqual(protocol.encode(Pet(0.0)), {'cuteness': 0.0})
        self.assertEqual(protocol.decode({'cuteness': 0.0}), Pet(0.0))
Ejemplo n.º 2
0
    def test_number_value(self):
        protocol = JSONProtocol(NumberValue)

        self.assertEqual(protocol.encode(NumberValue(2.5)), 2.5)
        self.assertEqual(protocol.decode(2.5), NumberValue(2.5))

        with self.assertRaises(ValidationError):
            protocol.decode('hiss!')
Ejemplo n.º 3
0
    def test_integer_value(self):
        protocol = JSONProtocol(IntegerValue)

        self.assertEqual(protocol.encode(IntegerValue(2)), 2)
        self.assertEqual(protocol.decode(2), IntegerValue(2))

        with self.assertRaises(ValidationError):
            protocol.decode('hiss!')
Ejemplo n.º 4
0
    def test_encode_message_json_name(self):
        class Pet(Message):
            size = Number(json_name='$size')

        protocol = JSONProtocol(Pet)

        pet = Pet()
        pet.size = 2.5
        self.assertEqual(protocol.encode(pet), {'$size': 2.5})
        self.assertEqual(protocol.decode({'$size': 2.5}), Pet(size=2.5))
Ejemplo n.º 5
0
    def test_timestamp(self):
        protocol = JSONProtocol(Timestamp)

        self.assertEqual(protocol.decode('2017-10-10T12:34:56Z'),
                         Timestamp(1507638896, 0))
        self.assertEqual(protocol.encode(Timestamp(1507638896, 12345)),
                         '2017-10-10T12:34:56.000012')

        with self.assertRaises(ValidationError):
            protocol.decode('yesterday')
Ejemplo n.º 6
0
    def test_encode_repeat_field(self):
        class Pet(Message):
            sounds = repeated(String())

        self.assertEqual(Pet.sounds.repeated, True)

        protocol = JSONProtocol(Pet)
        self.assertEqual(protocol.encode(Pet(['hiss!', 'slither'])),
                         {'sounds': ['hiss!', 'slither']})
        self.assertEqual(protocol.decode({'sounds': ['meow', 'purr']}),
                         Pet(['meow', 'purr']))
        self.assertEqual(protocol.decode({}), Pet())
        self.assertEqual(protocol.encode(Pet()), {})

        with self.assertRaises(ValidationError) as e:
            protocol.decode({'sounds': 'meow, purr'})

        self.assertEqual(e.exception.description,
                         "'meow, purr' is not of type 'list'")
        self.assertEqual(e.exception.path, ['sounds'])
Ejemplo n.º 7
0
    def test_string_value(self):
        protocol = JSONProtocol(StringValue)

        self.assertEqual(protocol.encode(StringValue('hiss!')), 'hiss!')
        self.assertEqual(protocol.decode('hiss!'), StringValue('hiss!'))

        self.assertEqual(protocol.pack(StringValue()), b'""')
        self.assertEqual(protocol.pack(StringValue('hiss!')), b'"hiss!"')

        with self.assertRaises(ValidationError):
            protocol.decode(42)
Ejemplo n.º 8
0
    def test_encode_message(self):
        class Pet(Message):
            sound: str

        protocol = JSONProtocol(Pet)
        self.assertEqual(protocol.encode(Pet('hiss!')), {'sound': 'hiss!'})
        self.assertEqual(protocol.decode({'sound': 'meow'}), Pet('meow'))
        self.assertEqual(protocol.decode({}), Pet())

        with self.assertRaises(ValidationError) as e:
            protocol.decode('bad')

        self.assertEqual(e.exception.description,
                         "'bad' is not of type 'object'")
        self.assertEqual(e.exception.path, [])
Ejemplo n.º 9
0
    def test_repeat(self):
        class Pet(Message):
            sounds: Repeat[str]

        protocol = JSONProtocol(Pet)

        self.assertEqual(protocol.encode(Pet(['hiss!', '(slither)'])),
                         {'sounds': ['hiss!', '(slither)']})
        self.assertEqual(protocol.decode({"sounds": ['hiss!']}),
                         Pet(['hiss!']))
        self.assertEqual(protocol.decode({}), Pet())

        self.assertEqual(protocol.pack(Pet()), b'{}')
        self.assertEqual(protocol.pack(Pet([])), b'{"sounds":[]}')
        self.assertEqual(protocol.pack(Pet(['hiss!'])),
                         b'{"sounds":["hiss!"]}')

        self.assertEqual(protocol.unpack(b'{}'), Pet())
        self.assertEqual(protocol.unpack(b'{"sounds":["hiss!"]}'),
                         Pet(['hiss!']))
Ejemplo n.º 10
0
    def test_field_mask(self):
        protocol = JSONProtocol(FieldMask)

        self.assertEqual(protocol.encode(FieldMask(['a', 'b'])), 'a,b')
        self.assertEqual(protocol.decode('a,b'), FieldMask(['a', 'b']))