@agreed/core
Version:
agreed is a mock server and test client, agreed will be helper for Consumer Driven Contract
456 lines (425 loc) • 11.4 kB
JavaScript
"use strict";
const agreedServer = require("../helper/server.js");
const test = require("eater/runner").test;
const http = require("http");
const AssertStream = require("assert-stream");
const plzPort = require("plz-port");
const assert = require("power-assert");
const mustCall = require("must-call");
const ts = require("typescript");
test("server: POST API", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.js",
port: port,
});
server.on("listening", () => {
const postData = JSON.stringify({
message: "foobarbaz",
});
const options = {
host: "localhost",
method: "POST",
path: "/hoge/abc",
port: port,
headers: {
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(postData),
},
};
const req = http
.request(options, (res) => {
const assert = new AssertStream();
assert.expect({ message: "hello post" });
res.pipe(assert);
server.close();
})
.on("error", console.error);
req.write(postData);
req.end();
});
});
});
test("server: PUT API", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.js",
port: port,
});
server.on("listening", () => {
const postData = JSON.stringify({
a: "b",
c: "d",
});
const options = {
host: "localhost",
method: "PUT",
path: "/foo/aaa",
port: port,
headers: {
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(postData),
},
};
const req = http
.request(options, (res) => {
const assert = new AssertStream();
assert.expect("hello put");
res.pipe(assert);
server.close();
})
.on("error", console.error);
req.write(postData);
req.end();
});
});
});
test("server: DELETE API", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.json5",
port: port,
});
server.on("listening", () => {
const options = {
host: "localhost",
method: "DELETE",
path: "/qux/fuga",
port: port,
};
const req = http
.request(options, (res) => {
assert(res.statusCode === 204);
server.close();
})
.on("error", console.error);
req.end();
});
});
});
test("server: GET with :id ", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.js",
port: port,
});
server.on("listening", () => {
const options = {
host: "localhost",
method: "GET",
path: "/path/fuga",
port: port,
};
const req = http
.request(options, (res) => {
assert(res.statusCode === 200);
const assertStream = new AssertStream();
assertStream.expect({ message: "hello fuga" });
res.pipe(assertStream);
server.close();
})
.on("error", console.error);
req.end();
});
});
});
test("server: POST with :id ", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.js",
port: port,
});
server.on("listening", () => {
const postData = JSON.stringify({
message: "foobarbaz",
});
const options = {
host: "localhost",
method: "POST",
path: "/path/fuga?meta=fooo",
port: port,
headers: {
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(postData),
},
};
const req = http
.request(options, (res) => {
assert(res.statusCode === 200);
const assertStream = new AssertStream();
assertStream.expect({ message: "hello fuga, fooo, foobarbaz" });
res.pipe(assertStream);
server.close();
})
.on("error", console.error);
req.write(postData);
req.end();
});
});
});
test("server: check response when expect is filled", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.js",
port: port,
});
server.on("listening", () => {
const postData = JSON.stringify({
message: "foobarbaz",
});
const options = {
host: "localhost",
method: "POST",
path: "/embed/from/response/fuga?meta=true",
port: port,
headers: {
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(postData),
},
};
const req = http
.request(options, (res) => {
assert(res.statusCode === 200);
const assertStream = new AssertStream();
assertStream.expect({
message: "hello fuga true foobarbaz",
image:
"http://imgfp.hotp.jp/SYS/cmn/images/front_002/logo_hotopepper_264x45.png",
topics: [
{
a: "a",
},
{
b: "b",
},
],
});
res.pipe(assertStream);
server.close();
})
.on("error", console.error);
req.write(postData);
req.end();
});
});
});
test("server: check response when header values are exists", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.js",
port: port,
});
server.on("listening", () => {
const options = {
host: "localhost",
method: "GET",
path: "/headers/2/",
port: port,
headers: {
"x-token": "abcdefghi",
"x-api-key": "123456789",
},
};
const req = http
.request(options, (res) => {
assert(res.statusCode === 200);
const assertStream = new AssertStream();
assertStream.expect({
result: "dunke abcdefghi 123456789",
});
res.pipe(assertStream);
server.close();
})
.on("error", console.error);
req.end();
});
});
});
test("server: response header has format string", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.json5",
port: port,
});
server.on("listening", () => {
const options = {
host: "localhost",
method: "GET",
path: "/path/header/format",
port: port,
};
const req = http
.request(options, (res) => {
assert(res.statusCode === 200);
assert(res.headers["access-control-allow-origin"] === "*");
server.close();
})
.on("error", console.error);
req.end();
});
});
});
test("server: response header using default response headers", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.json5",
port: port,
defaultResponseHeaders: {
"access-control-allow-origin": "test",
},
});
server.on("listening", () => {
const options = {
host: "localhost",
method: "GET",
path: "/path/default/header/",
port: port,
};
const req = http
.request(
options,
mustCall((res) => {
assert(res.statusCode === 200);
assert(res.headers["access-control-allow-origin"] === "test");
server.close();
})
)
.on("error", console.error);
req.end();
});
});
});
test("server: response header using default request headers", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.json5",
port: port,
defaultRequestHeaders: {
"x-forwarded-for": "forward",
},
});
server.on("listening", () => {
const options = {
host: "localhost",
method: "GET",
path: "/path/default/request/header/",
port: port,
headers: {
"x-forwarded-for": "forward",
},
};
const req = http
.request(
options,
mustCall((res) => {
assert(res.statusCode === 200);
const assertStream = new AssertStream();
assertStream.expect({
message: "forward",
});
res.pipe(assertStream);
server.close();
})
)
.on("error", console.error);
req.end();
});
});
});
test("server: POST API with ts agrees", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.ts",
port: port,
});
server.on("listening", () => {
const postData = JSON.stringify({
message: "test",
});
const options = {
host: "localhost",
method: "POST",
path: "/ts-messages",
port: port,
headers: {
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(postData),
},
};
const req = http
.request(options, (res) => {
const assert = new AssertStream();
assert.expect({ result: "test" });
res.pipe(assert);
server.close();
})
.on("error", console.error);
req.write(postData);
req.end();
});
});
});
test("server: POST with :id (when enable-prefer-query option is true)", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.js",
port: port,
enablePreferQuery: true,
});
server.on("listening", () => {
const postData = JSON.stringify({
message: "foobarbaz",
});
const options = {
host: "localhost",
method: "POST",
path: "/path/fuga?meta=fooo",
port: port,
headers: {
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(postData),
},
};
const req = http
.request(options, (res) => {
assert(res.statusCode === 404);
server.close();
})
.on("error", console.error);
req.write(postData);
req.end();
});
});
});
test("server: check response when expect is filled (when enable-prefer-query option is true)", () => {
plzPort().then((port) => {
const server = agreedServer({
path: "test/agrees/agrees.js",
port: port,
enablePreferQuery: true,
});
server.on("listening", () => {
const postData = JSON.stringify({
message: "foobarbaz",
});
const options = {
host: "localhost",
method: "POST",
path: "/embed/from/response/fuga?meta=true",
port: port,
headers: {
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(postData),
},
};
const req = http
.request(options, (res) => {
assert(res.statusCode === 404);
server.close();
})
.on("error", console.error);
req.write(postData);
req.end();
});
});
});