Skip to content

Commit

Permalink
tests: add integration tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dated committed Feb 11, 2020
1 parent 006956e commit 05d289d
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 14 deletions.
81 changes: 68 additions & 13 deletions __tests__/integration/core-api/handlers/peers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import "../../../utils";

import { app } from "@arkecosystem/core-container";
import { Peer } from "@arkecosystem/core-p2p/src/peer";
import semver from "semver";
import { setUp, tearDown } from "../__support__/setup";
import { utils } from "../utils";

Expand All @@ -24,6 +25,33 @@ const peers = [
},
latency: 1,
},
{
ip: "1.0.0.97",
port: 4002,
version: "2.5.0",
state: {
height: 3,
},
latency: 1,
},
{
ip: "1.0.0.96",
port: 4002,
version: "2.5.1",
state: {
height: 4,
},
latency: 2,
},
{
ip: "1.0.0.95",
port: 4002,
version: "2.5.2",
state: {
height: 4,
},
latency: 3,
},
];

beforeAll(async () => {
Expand Down Expand Up @@ -68,7 +96,7 @@ describe("API 2.0 - Peers", () => {
pageCount: 1,
previous: null,
self: "/peers?page=1&limit=100",
totalCount: 2,
totalCount: 5,
totalCountIsEstimate: undefined,
};
expect(response.data.meta).toEqual(expectedMeta);
Expand All @@ -79,53 +107,80 @@ describe("API 2.0 - Peers", () => {
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(peers.length);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[1].ip);
expect(response.data.data[1].ip).toBe(peers[0].ip);

expect(response.data.data.sort((a, b) => semver.compare(a, b))).toEqual(response.data.data);
});

it("should GET all the peers sorted by version,desc", async () => {
const response = await utils.request("GET", "peers", { orderBy: "version:desc" });
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(peers.length);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[0].ip);
expect(response.data.data[1].ip).toBe(peers[1].ip);

expect(response.data.data.sort((a, b) => semver.rcompare(a, b))).toEqual(response.data.data);
});

it("should GET all the peers sorted by height,asc", async () => {
const response = await utils.request("GET", "peers", { orderBy: "height:asc" });
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(peers.length);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[1].ip);
expect(response.data.data[1].ip).toBe(peers[0].ip);

expect(response.data.data.sort((a, b) => a.height < b.height)).toEqual(response.data.data);
});

it("should GET all the peers sorted by height,desc", async () => {
const response = await utils.request("GET", "peers", { orderBy: "height:desc" });
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(peers.length);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[0].ip);
expect(response.data.data[1].ip).toBe(peers[1].ip);

expect(response.data.data.sort((a, b) => a.height > b.height)).toEqual(response.data.data);
});

it("should GET all the peers sorted by latency,asc", async () => {
const response = await utils.request("GET", "peers", { orderBy: "latency:asc" });
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(peers.length);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[1].ip);
expect(response.data.data[1].ip).toBe(peers[0].ip);

expect(response.data.data.sort((a, b) => a.latency < b.latency)).toEqual(response.data.data);
});

it("should GET all the peers sorted by latency,desc", async () => {
const response = await utils.request("GET", "peers", { orderBy: "latency:desc" });
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(peers.length);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[0].ip);
expect(response.data.data[1].ip).toBe(peers[1].ip);

expect(response.data.data.sort((a, b) => a.latency > b.latency)).toEqual(response.data.data);
});

it("should GET the peers filtered by exact version", async () => {
const response = await utils.request("GET", "peers", { version: "2.5.0" });
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(1);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[2].ip);
});

it("should GET the peers filtered by version including wildcard", async () => {
const response = await utils.request("GET", "peers", { version: "2.5.*" });
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(3);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[2].ip);
expect(response.data.data[1].ip).toBe(peers[3].ip);
expect(response.data.data[1].ip).toBe(peers[4].ip);
});

it("should GET the peers filtered by version range", async () => {
const response = await utils.request("GET", "peers", { version: "2.5.1 - 2.5.2" });
expect(response).toBeSuccessfulResponse();
expect(response.data.data).toBeArrayOfSize(2);
expect(response.data.data[0]).toBeObject();
expect(response.data.data[0].ip).toBe(peers[3].ip);
expect(response.data.data[1].ip).toBe(peers[4].ip);
});
});

Expand Down
2 changes: 1 addition & 1 deletion packages/core-api/src/handlers/peers/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export class PeersController extends Controller {
let result = allPeers;

if (request.query.version) {
const versionRange = semver.validRange(request.query.version);
const versionRange = semver.validRange(decodeURIComponent((request.query as any).version));

if (versionRange) {
result = result.filter(peer => semver.satisfies(peer.version, versionRange));
Expand Down

0 comments on commit 05d289d

Please sign in to comment.