Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,81 +6,95 @@

import { describe, expect, it } from "vitest";

import { DevnetAccounts } from "@ensnode/ensnode-sdk/internal";
import { accounts } from "@ensnode/datasources/devnet";

const BASE_URL = process.env.ENSNODE_URL!;

describe("GET /api/resolve/primary-name/:address/:chainId", () => {
it.each([
{
description:
"resolves primary name for owner address on chain 1 (no primary name set in devnet)",
address: DevnetAccounts.owner.address,
description: "resolves primary name for owner address on chain 1",
address: accounts.owner.address,
chainId: "1",
query: "",
expectedStatus: 200,
expectedBody: { name: null, accelerationRequested: false, accelerationAttempted: false },
expected: {
status: 200,
body: {
name: "test.eth",
accelerationRequested: false,
accelerationAttempted: false,
},
},
},
{
description:
"resolves primary name for user address on chain 1 (no primary name set in devnet)",
address: DevnetAccounts.user.address,
description: "returns null for user without a primary name",
address: accounts.user.address,
chainId: "1",
query: "",
expectedStatus: 200,
expectedBody: { name: null, accelerationRequested: false, accelerationAttempted: false },
expected: {
status: 200,
body: { name: null, accelerationRequested: false, accelerationAttempted: false },
},
},
{
description: "owner address with accelerate=true returns accelerationRequested: true",
address: DevnetAccounts.owner.address,
address: accounts.owner.address,
chainId: "1",
query: "accelerate=true",
expectedStatus: 200,
expectedBody: { accelerationRequested: true, accelerationAttempted: false },
expected: {
status: 200,
body: { accelerationRequested: true, accelerationAttempted: false },
},
},
{
description: "returns 400 for invalid (non-hex) address",
address: "notanaddress",
chainId: "1",
query: "",
expectedStatus: 400,
expectedBody: {
message: "Invalid Input",
details: {
errors: [],
properties: {
address: {
errors: ["EVM address must be a valid EVM address"],
expected: {
status: 400,
body: {
message: "Invalid Input",
details: {
errors: [],
properties: {
address: {
errors: ["EVM address must be a valid EVM address"],
},
},
},
},
},
},
{
description: "returns 400 for non-numeric chainId",
address: DevnetAccounts.owner.address,
address: accounts.owner.address,
chainId: "notachainid",
query: "",
expectedStatus: 400,
expectedBody: {
message: "Invalid Input",
details: {
errors: [],
properties: {
chainId: {
errors: ["Defaultable Chain ID String must represent a non-negative integer (>=0)."],
expected: {
status: 400,
body: {
message: "Invalid Input",
details: {
errors: [],
properties: {
chainId: {
errors: [
"Defaultable Chain ID String must represent a non-negative integer (>=0).",
],
},
},
},
},
},
},
])("$description", async ({ address, chainId, query, expectedStatus, expectedBody }) => {
])("$description", async ({ address, chainId, query, expected }) => {
const response = await fetch(
`${BASE_URL}/api/resolve/primary-name/${address}/${chainId}${query ? `?${query}` : ""}`,
);
const body = await response.json();

expect(response.status).toBe(expectedStatus);
expect(body).toMatchObject(expectedBody);
expect(response.status).toBe(expected.status);
expect(body).toMatchObject(expected.body);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -6,98 +6,107 @@

import { describe, expect, it } from "vitest";

import { DevnetAccounts } from "@ensnode/ensnode-sdk/internal";
import { accounts } from "@ensnode/datasources/devnet";

const BASE_URL = process.env.ENSNODE_URL!;

describe("GET /api/resolve/primary-names/:address", () => {
it.each([
{
description:
"resolves primary names for owner address on chain 1 (no primary name set in devnet)",
address: DevnetAccounts.owner.address,
description: "resolves primary names for owner address on chain 1",
address: accounts.owner.address,
query: "chainIds=1",
expectedStatus: 200,
expectedBody: {
names: { "1": null },
accelerationRequested: false,
accelerationAttempted: false,
expected: {
status: 200,
body: {
names: { "1": "test.eth" },
accelerationRequested: false,
accelerationAttempted: false,
},
},
},
{
description: "resolves all primary names",
address: DevnetAccounts.owner.address,
address: accounts.owner.address,
query: "",
expectedStatus: 200,
expectedBody: {
names: { "1": null },
accelerationRequested: false,
accelerationAttempted: false,
expected: {
status: 200,
body: {
names: { "1": "test.eth" },
accelerationRequested: false,
accelerationAttempted: false,
},
},
},
{
description: "returns 400 for invalid (non-hex) address",
address: "notanaddress",
query: "chainIds=1",
expectedStatus: 400,
expectedBody: {
message: "Invalid Input",
details: {
errors: [],
properties: {
address: {
errors: ["EVM address must be a valid EVM address"],
expected: {
status: 400,
body: {
message: "Invalid Input",
details: {
errors: [],
properties: {
address: {
errors: ["EVM address must be a valid EVM address"],
},
},
},
},
},
},
{
description: "returns 400 when chainIds contains the default chain id (0)",
address: DevnetAccounts.owner.address,
address: accounts.owner.address,
query: "chainIds=0",
expectedStatus: 400,
expectedBody: {
message: "Invalid Input",
details: {
errors: [],
properties: {
chainIds: {
errors: [],
items: [
{
errors: ["Must not be the 'default' EVM chain id (0)."],
},
],
expected: {
status: 400,
body: {
message: "Invalid Input",
details: {
errors: [],
properties: {
chainIds: {
errors: [],
items: [
{
errors: ["Must not be the 'default' EVM chain id (0)."],
},
],
},
},
},
},
},
},
{
description: "returns 400 when chainIds contains duplicate chain ids",
address: DevnetAccounts.owner.address,
address: accounts.owner.address,
query: "chainIds=1,1",
expectedStatus: 400,
expectedBody: {
message: "Invalid Input",
details: {
errors: [],
properties: {
chainIds: {
errors: ["Must be a set of unique entries."],
expected: {
status: 400,
body: {
message: "Invalid Input",
details: {
errors: [],
properties: {
chainIds: {
errors: ["Must be a set of unique entries."],
},
},
},
},
},
},
])("$description", async ({ address, query, expectedStatus, expectedBody }) => {
])("$description", async ({ address, query, expected }) => {
const response = await fetch(
`${BASE_URL}/api/resolve/primary-names/${address}${query ? `?${query}` : ""}`,
);
const body = await response.json();

expect(response.status).toBe(expectedStatus);
expect(body).toMatchObject(expectedBody);
expect(response.status).toBe(expected.status);
expect(body).toMatchObject(expected.body);
});
});
Loading
Loading