github.com/status-im/status-go@v1.1.0/integration-tests/tests/test_waku_rpc.py (about)

     1  import random
     2  import pytest
     3  import jsonschema
     4  import json
     5  import time
     6  from conftest import option, user_1, user_2
     7  from test_cases import RpcTestCase, TransactionTestCase
     8  from dataclasses import dataclass, field
     9  from typing import List, Optional
    10  
    11  
    12  @pytest.mark.rpc
    13  @pytest.mark.wakuext
    14  class TestRpc(RpcTestCase):
    15  
    16      @pytest.mark.parametrize(
    17          "method, params",
    18          [
    19              ("wakuext_peers", []),
    20          ],
    21      )
    22      def test_(self, method, params):
    23          _id = str(random.randint(1, 8888))
    24  
    25          response = self.rpc_request(method, params, _id, url=option.rpc_url_2)
    26          self.verify_is_valid_json_rpc_response(response)
    27          self.verify_json_schema(response, method)
    28  
    29  
    30  @pytest.mark.rpc
    31  @pytest.mark.accounts
    32  @pytest.mark.wakuext
    33  class TestRpcMessaging(RpcTestCase):
    34  
    35      @dataclass
    36      class User:
    37          rpc_url: str
    38          chat_public_key: Optional[str] = None
    39          chat_id: Optional[str] = None
    40  
    41      def test_add_contact(self):
    42          _id = str(random.randint(1, 8888))
    43  
    44          self.user_1 = self.User(rpc_url=option.rpc_url)
    45          self.user_2 = self.User(rpc_url=option.rpc_url_2)
    46  
    47          # get chat public key
    48          for user in self.user_1, self.user_2:
    49              response = self.rpc_request(
    50                  "accounts_getAccounts", [], _id, url=user.rpc_url
    51              )
    52              self.verify_is_valid_json_rpc_response(response)
    53  
    54              user.chat_public_key = next(
    55                  (
    56                      item["public-key"]
    57                      for item in response.json()["result"]
    58                      if item["chat"]
    59                  ),
    60                  None,
    61              )
    62  
    63          # send contact requests
    64          for sender in self.user_1, self.user_2:
    65              for receiver in self.user_1, self.user_2:
    66                  if sender != receiver:
    67                      response = self.rpc_request(
    68                          method="wakuext_sendContactRequest",
    69                          params=[
    70                              {
    71                                  "id": receiver.chat_public_key,
    72                                  "message": f"contact request from {sender.chat_public_key}: sent at {time.time()}",
    73                              }
    74                          ],
    75                          _id=99,
    76                          url=sender.rpc_url,
    77                      )
    78  
    79                      self.verify_is_valid_json_rpc_response(response)
    80                      sender.chat_id = response.json()["result"]["chats"][0]["lastMessage"]["id"]
    81  
    82          # accept contact requests
    83          for user in self.user_1, self.user_2:
    84              response = self.rpc_request(
    85                  method="wakuext_acceptContactRequest",
    86                  params=[
    87                      {
    88                          "id": user.chat_id,
    89                      }
    90                  ],
    91                  _id=99,
    92                  url=user.rpc_url,
    93              )
    94              self.verify_is_valid_json_rpc_response(response)
    95  
    96          # verify contacts
    97          for user in (self.user_1, self.user_2), (self.user_2, self.user_1):
    98              response = self.rpc_request(
    99                  method="wakuext_contacts",
   100                  params=[],
   101                  _id=99,
   102                  url=user[0].rpc_url,
   103              )
   104              self.verify_is_valid_json_rpc_response(response)
   105  
   106              response = response.json()
   107              assert response["result"][0]["added"] == True
   108              assert response["result"][0]["id"] == user[1].chat_public_key