2022-06-20 15:52:12 +08:00
import pytest
2022-01-30 00:05:01 +08:00
from pydantic import ValidationError , parse_obj_as
2022-01-17 00:29:09 +08:00
from utils import make_fake_message
2022-01-29 23:39:13 +08:00
def test_segment_add ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
assert MessageSegment . text ( " text " ) + MessageSegment . text ( " text " ) == Message (
[ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ]
)
assert MessageSegment . text ( " text " ) + " text " == Message (
[ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ]
)
2022-02-07 17:23:24 +08:00
assert (
MessageSegment . text ( " text " ) + Message ( [ MessageSegment . text ( " text " ) ] )
2022-01-29 23:39:13 +08:00
) == Message ( [ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ] )
2022-01-17 00:29:09 +08:00
2022-01-29 23:39:13 +08:00
assert " text " + MessageSegment . text ( " text " ) == Message (
[ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ]
)
2022-01-30 00:05:01 +08:00
def test_segment_validate ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
assert parse_obj_as (
2022-06-20 15:52:12 +08:00
MessageSegment ,
{ " type " : " text " , " data " : { " text " : " text " } , " extra " : " should be ignored " } ,
2022-01-30 00:05:01 +08:00
) == MessageSegment . text ( " text " )
2022-06-20 15:52:12 +08:00
with pytest . raises ( ValidationError ) :
2022-01-30 00:05:01 +08:00
parse_obj_as ( MessageSegment , " some str " )
2022-06-20 15:52:12 +08:00
with pytest . raises ( ValidationError ) :
parse_obj_as ( MessageSegment , { " data " : { } } )
2022-01-30 00:05:01 +08:00
2023-04-04 21:42:01 +08:00
def test_segment_join ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
seg = MessageSegment . text ( " test " )
iterable = [
MessageSegment . text ( " first " ) ,
Message ( [ MessageSegment . text ( " second " ) , MessageSegment . text ( " third " ) ] ) ,
]
assert seg . join ( iterable ) == Message (
[
MessageSegment . text ( " first " ) ,
MessageSegment . text ( " test " ) ,
MessageSegment . text ( " second " ) ,
MessageSegment . text ( " third " ) ,
]
)
2022-01-30 11:04:02 +08:00
def test_segment ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
assert len ( MessageSegment . text ( " text " ) ) == 4
assert MessageSegment . text ( " text " ) != MessageSegment . text ( " other " )
assert MessageSegment . text ( " text " ) . get ( " data " ) == { " text " : " text " }
assert list ( MessageSegment . text ( " text " ) . keys ( ) ) == [ " type " , " data " ]
assert list ( MessageSegment . text ( " text " ) . values ( ) ) == [ " text " , { " text " : " text " } ]
assert list ( MessageSegment . text ( " text " ) . items ( ) ) == [
( " type " , " text " ) ,
( " data " , { " text " : " text " } ) ,
]
origin = MessageSegment . text ( " text " )
copy = origin . copy ( )
assert origin is not copy
assert origin == copy
2022-01-29 23:39:13 +08:00
def test_message_add ( ) :
2022-01-17 00:29:09 +08:00
Message = make_fake_message ( )
2022-01-29 23:39:13 +08:00
MessageSegment = Message . get_segment_class ( )
2022-02-07 17:23:24 +08:00
assert (
Message ( [ MessageSegment . text ( " text " ) ] ) + MessageSegment . text ( " text " )
2022-01-29 23:39:13 +08:00
) == Message ( [ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ] )
2022-01-17 00:29:09 +08:00
2022-01-29 23:39:13 +08:00
assert Message ( [ MessageSegment . text ( " text " ) ] ) + " text " == Message (
[ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ]
)
2022-01-17 00:29:09 +08:00
2022-02-07 17:23:24 +08:00
assert (
Message ( [ MessageSegment . text ( " text " ) ] ) + Message ( [ MessageSegment . text ( " text " ) ] )
2022-01-29 23:39:13 +08:00
) == Message ( [ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ] )
2022-01-17 00:29:09 +08:00
2022-01-30 11:04:02 +08:00
assert " text " + Message ( [ MessageSegment . text ( " text " ) ] ) == Message (
[ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ]
)
2022-01-29 23:39:13 +08:00
msg = Message ( [ MessageSegment . text ( " text " ) ] )
msg + = MessageSegment . text ( " text " )
assert msg == Message ( [ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ] )
2022-01-17 00:29:09 +08:00
2022-01-29 23:39:13 +08:00
def test_message_getitem ( ) :
2022-01-17 00:29:09 +08:00
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
message = Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . image ( " test2 " ) ,
MessageSegment . image ( " test3 " ) ,
MessageSegment . text ( " test4 " ) ,
]
)
assert message [ 0 ] == MessageSegment . text ( " test " )
2023-02-22 23:32:48 +08:00
assert message [ : 2 ] == Message (
2022-01-17 00:29:09 +08:00
[ MessageSegment . text ( " test " ) , MessageSegment . image ( " test2 " ) ]
)
assert message [ " image " ] == Message (
[ MessageSegment . image ( " test2 " ) , MessageSegment . image ( " test3 " ) ]
)
assert message [ " image " , 0 ] == MessageSegment . image ( " test2 " )
assert message [ " image " , 0 : 2 ] == message [ " image " ]
assert message . index ( message [ 0 ] ) == 0
assert message . index ( " image " ) == 1
assert message . get ( " image " ) == message [ " image " ]
assert message . get ( " image " , 114514 ) == message [ " image " ]
assert message . get ( " image " , 1 ) == Message ( [ message [ " image " , 0 ] ] )
assert message . count ( " image " ) == 2
2022-01-30 00:05:01 +08:00
def test_message_validate ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
2022-01-30 11:04:02 +08:00
Message_ = make_fake_message ( )
assert parse_obj_as ( Message , Message ( [ ] ) ) == Message ( [ ] )
2022-06-20 15:52:12 +08:00
with pytest . raises ( ValidationError ) :
2022-01-30 11:04:02 +08:00
parse_obj_as ( Message , Message_ ( [ ] ) )
2022-01-30 00:05:01 +08:00
assert parse_obj_as ( Message , " text " ) == Message ( [ MessageSegment . text ( " text " ) ] )
assert parse_obj_as ( Message , { " type " : " text " , " data " : { " text " : " text " } } ) == Message (
[ MessageSegment . text ( " text " ) ]
)
2022-02-12 16:15:06 +08:00
assert parse_obj_as (
Message ,
[ MessageSegment . text ( " text " ) , { " type " : " text " , " data " : { " text " : " text " } } ] ,
) == Message ( [ MessageSegment . text ( " text " ) , MessageSegment . text ( " text " ) ] )
2022-01-30 00:05:01 +08:00
2022-06-20 15:52:12 +08:00
with pytest . raises ( ValidationError ) :
2022-01-30 00:05:01 +08:00
parse_obj_as ( Message , object ( ) )
2023-04-04 21:42:01 +08:00
def test_message_contains ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
message = Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . image ( " test2 " ) ,
MessageSegment . image ( " test3 " ) ,
MessageSegment . text ( " test4 " ) ,
]
)
assert message . has ( MessageSegment . text ( " test " ) ) is True
assert MessageSegment . text ( " test " ) in message
assert message . has ( " image " ) is True
assert " image " in message
assert message . has ( MessageSegment . text ( " foo " ) ) is False
assert MessageSegment . text ( " foo " ) not in message
assert message . has ( " foo " ) is False
assert " foo " not in message
def test_message_only ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
message = Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . text ( " test2 " ) ,
]
)
assert message . only ( " text " ) is True
assert message . only ( MessageSegment . text ( " test " ) ) is False
message = Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . image ( " test2 " ) ,
MessageSegment . image ( " test3 " ) ,
MessageSegment . text ( " test4 " ) ,
]
)
assert message . only ( " text " ) is False
message = Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . text ( " test " ) ,
]
)
assert message . only ( MessageSegment . text ( " test " ) ) is True
def test_message_join ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
msg = Message ( [ MessageSegment . text ( " test " ) ] )
iterable = [
MessageSegment . text ( " first " ) ,
Message ( [ MessageSegment . text ( " second " ) , MessageSegment . text ( " third " ) ] ) ,
]
assert msg . join ( iterable ) == Message (
[
MessageSegment . text ( " first " ) ,
MessageSegment . text ( " test " ) ,
MessageSegment . text ( " second " ) ,
MessageSegment . text ( " third " ) ,
]
)
def test_message_include ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
message = Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . image ( " test2 " ) ,
MessageSegment . image ( " test3 " ) ,
MessageSegment . text ( " test4 " ) ,
]
)
assert message . include ( " text " ) == Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . text ( " test4 " ) ,
]
)
def test_message_exclude ( ) :
Message = make_fake_message ( )
MessageSegment = Message . get_segment_class ( )
message = Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . image ( " test2 " ) ,
MessageSegment . image ( " test3 " ) ,
MessageSegment . text ( " test4 " ) ,
]
)
assert message . exclude ( " image " ) == Message (
[
MessageSegment . text ( " test " ) ,
MessageSegment . text ( " test4 " ) ,
]
)