1
+ import asyncio
2
+ from typing import Tuple
3
+
1
4
import pytest
2
- from aleph_message .models import PostMessage
5
+ from aleph_message .models import ItemHash
3
6
4
7
from aleph .sdk .client import AuthenticatedAlephClient
5
8
from aleph .sdk .models .message import MessageFilter
6
9
from aleph .sdk .types import Account
7
10
8
11
from .config import REFERENCE_NODE , TARGET_NODE , TEST_CHANNEL
9
- from .toolkit import try_until
12
+ from .toolkit import has_messages , has_no_messages , try_until
10
13
11
14
12
15
async def create_and_forget_post (
13
16
account : Account , emitter_node : str , receiver_node : str , channel = TEST_CHANNEL
14
- ) -> str :
17
+ ) -> Tuple [ ItemHash , ItemHash ] :
15
18
async with AuthenticatedAlephClient (
16
19
account = account , api_server = emitter_node
17
20
) as tx_session :
@@ -26,7 +29,7 @@ async def create_and_forget_post(
26
29
) as rx_session :
27
30
await try_until (
28
31
rx_session .get_messages ,
29
- lambda response : len ( response . messages ) > 0 ,
32
+ has_messages ,
30
33
timeout = 5 ,
31
34
message_filter = MessageFilter (
32
35
hashes = [post_message .item_hash ],
@@ -46,40 +49,31 @@ async def create_and_forget_post(
46
49
assert forget_message .sender == account .get_address ()
47
50
assert forget_message .content .reason == reason
48
51
assert forget_message .content .hashes == [post_hash ]
52
+ forget_hash = forget_message .item_hash
49
53
50
54
# Wait until the message is forgotten
51
55
async with AuthenticatedAlephClient (
52
56
account = account , api_server = receiver_node
53
57
) as rx_session :
54
58
await try_until (
55
59
rx_session .get_messages ,
56
- lambda response : len ( response . messages ) > 0 ,
60
+ has_messages ,
57
61
timeout = 5 ,
58
62
message_filter = MessageFilter (
59
- hashes = [forget_message . item_hash ],
63
+ hashes = [forget_hash ],
60
64
),
61
65
)
62
66
63
- async with AuthenticatedAlephClient (
64
- account = account , api_server = receiver_node
65
- ) as rx_session :
66
- forgotten_messages = await try_until (
67
+ await try_until (
67
68
rx_session .get_messages ,
68
- lambda response : len ( response . messages ) == 0 ,
69
+ has_no_messages ,
69
70
timeout = 5 ,
70
71
message_filter = MessageFilter (
71
72
hashes = [post_hash ],
72
73
),
73
74
)
74
- # TODO: Should we now receive any messages? It seems they are completely gone
75
-
76
- assert len (forgotten_messages .messages ) == 1
77
- forgotten_post = forgotten_messages .messages [0 ]
78
- assert forgotten_post .forgotten_by == [forget_message .item_hash ]
79
- assert forgotten_post .item_content is None
80
- print (forgotten_post )
81
75
82
- return post_hash
76
+ return post_hash , forget_hash
83
77
84
78
85
79
@pytest .mark .asyncio
@@ -88,7 +82,7 @@ async def test_create_and_forget_post_on_target(fixture_account):
88
82
Create a post on the target node, then forget it and check that the change is propagated
89
83
to the reference node.
90
84
"""
91
- _ = await create_and_forget_post (fixture_account , TARGET_NODE , REFERENCE_NODE )
85
+ _ , _ = await create_and_forget_post (fixture_account , TARGET_NODE , REFERENCE_NODE )
92
86
93
87
94
88
@pytest .mark .asyncio
@@ -97,7 +91,7 @@ async def test_create_and_forget_post_on_reference(fixture_account):
97
91
Create a post on the reference node, then forget it and check that the change is propagated
98
92
to the target node.
99
93
"""
100
- _ = await create_and_forget_post (fixture_account , REFERENCE_NODE , TARGET_NODE )
94
+ _ , _ = await create_and_forget_post (fixture_account , REFERENCE_NODE , TARGET_NODE )
101
95
102
96
103
97
@pytest .mark .asyncio
@@ -107,26 +101,33 @@ async def test_forget_a_forget_message(fixture_account):
107
101
"""
108
102
109
103
# TODO: this test should be moved to the PyAleph API tests, once a framework is in place.
110
- post_hash = await create_and_forget_post (fixture_account , TARGET_NODE , TARGET_NODE )
104
+ post_hash , forget_hash = await create_and_forget_post (
105
+ fixture_account , TARGET_NODE , REFERENCE_NODE
106
+ )
111
107
async with AuthenticatedAlephClient (
112
108
account = fixture_account , api_server = TARGET_NODE
113
- ) as session :
114
- get_post_message : PostMessage = await session .get_message (post_hash )
115
-
116
- forget_message_hash = get_post_message .forgotten_by [0 ]
117
- forget_message , forget_status = await session .forget (
118
- hashes = [forget_message_hash ],
109
+ ) as tx_session :
110
+ forget_message , forget_status = await tx_session .forget (
111
+ hashes = [forget_hash ],
119
112
reason = "I want to remember this post. Maybe I can forget I forgot it?" ,
120
113
channel = TEST_CHANNEL ,
121
114
)
122
115
123
116
print (forget_message )
124
117
125
- get_forget_message_response = await session .get_messages (
118
+ # wait 5 seconds
119
+ await asyncio .sleep (5 )
120
+
121
+ async with AuthenticatedAlephClient (
122
+ account = fixture_account , api_server = REFERENCE_NODE
123
+ ) as rx_session :
124
+ get_forget_message_response = await try_until (
125
+ rx_session .get_messages ,
126
+ has_messages ,
127
+ timeout = 5 ,
126
128
message_filter = MessageFilter (
127
- hashes = [forget_message_hash ],
128
- channels = [TEST_CHANNEL ],
129
- )
129
+ hashes = [forget_hash ],
130
+ ),
130
131
)
131
132
assert len (get_forget_message_response .messages ) == 1
132
133
forget_message = get_forget_message_response .messages [0 ]
0 commit comments