@@ -318,6 +318,19 @@ class APIClientTests: XCTestCase {
318318 XCTAssertEqual ( result. first? . account. owner, Token2022Program . id. base58EncodedString)
319319 XCTAssertEqual ( result. first? . pubkey, " 43W7QvyKr5hJhFRhvteb7VbsLdwGQG3VZ2fRYVcw5yFN " )
320320 }
321+
322+ func testGetTokenLargestAccounts( ) async throws {
323+ let mock = NetworkManagerMock ( NetworkManagerMockJSON [ " getTokenLargestAccounts " ] !)
324+ let apiClient = JSONRPCAPIClient ( endpoint: endpoint, networkManager: mock)
325+ let result = try await apiClient. getTokenLargestAccounts (
326+ pubkey: " 3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E "
327+ )
328+ XCTAssertEqual ( result. first? . address, " FYjHNoFtSQ5uijKrZFyYAxvEr87hsKXkXcxkcmkBAf4r " )
329+ XCTAssertEqual ( result. first? . amount, " 771 " )
330+ XCTAssertEqual ( result. first? . decimals, 2 )
331+ XCTAssertEqual ( result. first? . uiAmount, 7.71 )
332+
333+ }
321334
322335 func testSendTransactionError1( ) async throws {
323336 let mock = NetworkManagerMock ( NetworkManagerMockJSON [ " sendTransactionError1 " ] !)
@@ -405,6 +418,8 @@ private var NetworkManagerMockJSON = [
405418 " getTokenAccountsByOwner " : " { \" jsonrpc \" : \" 2.0 \" , \" result \" :{ \" context \" :{ \" slot \" :134133059}, \" value \" :[{ \" account \" :{ \" data \" :[ \" KLrvuAuq+8gDEGl28m80PrYteWuPlqjGuBpCW5rA84gJ7HiGa7fztefqNjU2MSBOZ3HPlRmb0eAXj0bEanmyfAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \" , \" base64 \" ], \" executable \" :false, \" lamports \" :2039280, \" owner \" : \" TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA \" , \" rentEpoch \" :309}, \" pubkey \" : \" 9nuVPk3KR7oUXmDsHL7irue2Nxaj3ejvuBXoaEcXMmN7 \" },{ \" account \" :{ \" data \" :[ \" ppdSk884LShYnHoHm7XiDlZ28iJVm9BHPgrAEfxU44AJ7HiGa7fztefqNjU2MSBOZ3HPlRmb0eAXj0bEanmyfAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \" , \" base64 \" ], \" executable \" :false, \" lamports \" :2039280, \" owner \" : \" TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA \" , \" rentEpoch \" :309}, \" pubkey \" : \" 9bNJ7AF8w1Ms4BsqpqbUPZ16vCSePYJpgSBUTRqd8ph4 \" }]}, \" id \" : \" 0891812F-1F8B-4927-80F7-C7C1C1D990B3 \" } \n " ,
406419 " getToken2022AccountsByOwner " :
407420 #"{"jsonrpc":"2.0","result":{"context":{"apiVersion":"1.17.14","slot":239989261},"value":[{"account":{"data":["qDijZLhcKuVLVBmL6Ve9S9DvSU7kn1XtkCnOtnDXGjA1zKFCx20D2kF7X/jEMh09sgYqyBraJk1DWsFwaUfQkCtqbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcAAAACAAgAAAAAAAAAAAA=","base64"],"executable":false,"lamports":2157600,"owner":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb","rentEpoch":0,"space":182},"pubkey":"43W7QvyKr5hJhFRhvteb7VbsLdwGQG3VZ2fRYVcw5yFN"}]},"id":1}"# ,
421+ " getTokenLargestAccounts " :
422+ #"{"jsonrpc":"2.0","result":{"context":{"slot":1114},"value":[{"address":"FYjHNoFtSQ5uijKrZFyYAxvEr87hsKXkXcxkcmkBAf4r","amount":"771","decimals":2,"uiAmount":7.71,"uiAmountString":"7.71"},{"address":"BnsywxTcaYeNUtzrPxQUvzAWxfzZe3ZLUJ4wMMuLESnu","amount":"229","decimals":2,"uiAmount":2.29,"uiAmountString":"2.29"}]},"id":1}"# ,
408423 " sendTransactionError1 " : #"{"jsonrpc":"2.0","error":{"code":-32003,"message":"Transaction precompile verification failure InvalidAccountIndex"},"id":"7DEDE6E5-95E7-4866-BFC0-B4C10A76B457"}"# ,
409424 " getTokenAccountBalance " : #"{"jsonrpc":"2.0","result":{"context":{"slot":135942588},"value":{"amount":"491717631607","decimals":9,"uiAmount":491.717631607,"uiAmountString":"491.717631607"}},"id":"3D9E7B6E-B48D-40EF-B656-EA3054227CCD"}"# ,
410425 " getHealth " : #"{ "jsonrpc": "2.0", "result": "ok", "id": 1 }"# ,
0 commit comments