From 59c5142909171443388d625faedf84f1aa3937c9 Mon Sep 17 00:00:00 2001 From: xbgmsharp Date: Wed, 7 Aug 2024 22:14:46 +0200 Subject: [PATCH] Add more anonymous unit tests --- tests/index6.js | 203 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/tests.sh | 8 ++ 2 files changed, 211 insertions(+) create mode 100644 tests/index6.js diff --git a/tests/index6.js b/tests/index6.js new file mode 100644 index 0000000..7969a01 --- /dev/null +++ b/tests/index6.js @@ -0,0 +1,203 @@ +"use strict"; +/* + * Unit test #5 + * Public/Anonymous access + * + * process.env.PGSAIL_API_URI = from inside the docker + * + * npm install supertest should mocha mochawesome moment + * alias mocha="./node_modules/mocha/bin/_mocha" + * mocha index5.js --reporter mochawesome --reporter-options reportDir=/mnt/postgsail/,reportFilename=report_api.html + * + */ + +const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); + +const supertest = require("supertest"); +// Deprecated +const should = require("should"); +//const chai = require("chai"); +//const should = chai.should(); +let request = null; +var moment = require("moment"); + +// Users Array +[ + { + cname: process.env.PGSAIL_API_URI, + name: "PostgSail unit test anonymous, no x-is-public header", + moorages: { + url: "/moorages_view", + payload: null, + res: {}, + }, + stays: { + url: "/stays_view", + payload: null, + res: {}, + }, + logs: { + url: "/logs_view", + payload: null, + res: {}, + }, + log: { + url: "/log_view?id=eq.1", + payload: null, + res: {}, + }, + monitoring: { + url: "/monitoring_view", + payload: null, + res: {}, + }, + timelapse: { + url: "/rpc/timelapse_fn", + payload: null, + res: {}, + }, + timelapse_full: { + url: "/rpc/timelapse_fn", + payload: null, + res: {}, + }, + stats_logs: { + url: "/rpc/stats_logs_fn", + payload: null, + res: {}, + }, + stats_stays: { + url: "/rpc/stats_stay_fn", + payload: null, + res: {}, + }, + export_gpx: { + url: "/rpc/export_logbook_gpx_fn", + payload: null, + res: {}, + }, + }, +].forEach(function (test) { + //console.log(`${test.cname}`); + describe(`${test.name}`, function () { + request = supertest.agent(test.cname); + request.set("User-Agent", "PostgSail unit tests"); + + describe("With no JWT as api_anonymous, no x-is-public", function () { + it("/stays_view, api_anonymous no jwt token", function (done) { + // Reset agent so we do not save cookies + request = supertest.agent(test.cname); + request + .get(test.stays.url) + .set("Accept", "application/json") + .end(function (err, res) { + res.status.should.equal(200); + should.exist(res.header["content-type"]); + should.exist(res.header["server"]); + res.header["content-type"].should.match(new RegExp("json", "g")); + res.header["server"].should.match(new RegExp("postgrest", "g")); + res.body.length.should.be.equal(0); + done(err); + }); + }); + it("/moorages_view, api_anonymous no jwt token", function (done) { + // Reset agent so we do not save cookies + request = supertest.agent(test.cname); + request + .get(test.log.url) + .set("Accept", "application/json") + .end(function (err, res) { + res.status.should.equal(200); + should.exist(res.header["content-type"]); + should.exist(res.header["server"]); + res.header["content-type"].should.match(new RegExp("json", "g")); + res.header["server"].should.match(new RegExp("postgrest", "g")); + res.body.length.should.be.equal(0); + done(err); + }); + }); + it("/logs_view, api_anonymous no jwt token", function (done) { + // Reset agent so we do not save cookies + request = supertest.agent(test.cname); + request + .get(test.logs.url) + .set("Accept", "application/json") + .end(function (err, res) { + res.status.should.equal(200); + should.exist(res.header["content-type"]); + should.exist(res.header["server"]); + res.header["content-type"].should.match(new RegExp("json", "g")); + res.header["server"].should.match(new RegExp("postgrest", "g")); + res.body.length.should.be.equal(0); + done(err); + }); + }); + it("/log_view, api_anonymous no jwt token", function (done) { + // Reset agent so we do not save cookies + request = supertest.agent(test.cname); + request + .get(test.log.url) + .set("Accept", "application/json") + .end(function (err, res) { + res.status.should.equal(200); + should.exist(res.header["content-type"]); + should.exist(res.header["server"]); + res.header["content-type"].should.match(new RegExp("json", "g")); + res.header["server"].should.match(new RegExp("postgrest", "g")); + res.body.length.should.be.equal(0); + done(err); + }); + }); + it("/monitoring_view, api_anonymous no jwt token", function (done) { + // Reset agent so we do not save cookies + request = supertest.agent(test.cname); + request + .get(test.monitoring.url) + .set("Accept", "application/json") + .end(function (err, res) { + console.log(res.text); + res.status.should.equal(200); + should.exist(res.header["content-type"]); + should.exist(res.header["server"]); + res.header["content-type"].should.match(new RegExp("json", "g")); + res.header["server"].should.match(new RegExp("postgrest", "g")); + res.body.length.should.be.equal(0); + done(err); + }); + }); + it("/rpc/timelapse_fn, api_anonymous no jwt token", function (done) { + // Reset agent so we do not save cookies + request = supertest.agent(test.cname); + request + .post(test.timelapse.url) + .set("Accept", "application/json") + .end(function (err, res) { + console.log(res.text); + res.status.should.equal(200); + should.exist(res.header["content-type"]); + should.exist(res.header["server"]); + res.header["content-type"].should.match(new RegExp("json", "g")); + res.header["server"].should.match(new RegExp("postgrest", "g")); + done(err); + }); + }); + it("/rpc/export_logbook_gpx_fn, api_anonymous no jwt token", function (done) { + // Reset agent so we do not save cookies + request = supertest.agent(test.cname); + request + .post(test.export_gpx.url) + .send({_id: 1}) + .set("Accept", "application/json") + .end(function (err, res) { + console.log(res.text) + res.status.should.equal(401); + should.exist(res.header["content-type"]); + should.exist(res.header["server"]); + res.header["content-type"].should.match(new RegExp("json", "g")); + res.header["server"].should.match(new RegExp("postgrest", "g")); + done(err); + }); + }); + }); // user JWT + }); // OpenAPI description +}); // Users Array diff --git a/tests/tests.sh b/tests/tests.sh index e494b9d..358fee6 100644 --- a/tests/tests.sh +++ b/tests/tests.sh @@ -168,6 +168,14 @@ else echo mocha index5.js exit 1 fi +# Anonymous API unit tests +$mymocha index6.js --reporter ./node_modules/mochawesome --reporter-options reportDir=output/,reportFilename=report6.html +if [ $? -eq 0 ]; then + echo OK +else + echo mocha index6.js + exit 1 +fi # Anonymous SQL unit tests psql ${PGSAIL_DB_URI} < sql/anonymous.sql > output/anonymous.sql.output