Skip to content

Commit

Permalink
Improved testing of package objects, fixed bugs found by this, implem…
Browse files Browse the repository at this point in the history
…ented it's usage elsewhere
  • Loading branch information
confused-Techie committed Sep 20, 2023
1 parent c74f305 commit 2ea0e16
Show file tree
Hide file tree
Showing 10 changed files with 207 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/controllers/getThemesFeatured.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
module.exports = {
docs: {
summary: "Display featured packages that are themes.",
respones: {
responses: {
200: {
description: "An array of featured themes.",
content: {
Expand Down
10 changes: 9 additions & 1 deletion src/controllers/getThemesSearch.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,15 @@

module.exports = {
docs: {
summary: "Get featured packages that are themes. Previously undocumented."
summary: "Get featured packages that are themes. Previously undocumented.",
responses: {
200: {
description: "A paginated response of themes.",
content: {
"application/json": "$packageObjectShortArray"
}
}
}
},
endpoint: {
method: "GET",
Expand Down
3 changes: 3 additions & 0 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,9 @@ async function constructPackageObjectShort(pack) {
newPack.badges.push({ title: "Made for Pulsar!", type: "success" });
}

// Remove keys that aren't intended to exist in a Package Object Short
delete newPack.versions;

return newPack;
};

Expand Down
7 changes: 5 additions & 2 deletions tests/http/getThemes.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@ describe("Behaves as expected", () => {
test("Returns proper data on success", async () => {
const addName = await database.insertNewPackage({
name: "test-package",
repository: "https://github.com/confused-Techie/package-backend",
repository: {
url: "https://github.com/confused-Techie/package-backend",
type: "git"
},
creation_method: "Test Package",
releases: {
latest: "1.1.0"
Expand Down Expand Up @@ -87,7 +90,7 @@ describe("Behaves as expected", () => {
+ `<${context.config.server_url}/api/themes?page=1&sort=downloads&direction=desc>;`
+ ' rel="last"'
);
// TODO test object structure to known good
expect(sso).toMatchEndpointSuccessObject(endpoint);
await database.removePackageByName("test-package", true);
});

Expand Down
9 changes: 6 additions & 3 deletions tests/http/getThemesFeatured.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ describe("Behaves as expected", () => {
const addPack = await database.insertNewPackage({
// We know a currently featured package is 'atom-material-ui'
name: "atom-material-ui",
repository: "https://github.com/confused-Techie/package-backend",
repository: {
url: "https://github.com/confused-Techie/package-backend",
type: "git"
},
creation_method: "Test Package",
releases: {
latest: "1.1.0"
Expand Down Expand Up @@ -54,12 +57,12 @@ describe("Behaves as expected", () => {
});

const sso = await endpoint.logic({}, context);

expect(sso.ok).toBe(true);
expect(sso.content).toBeArray();
expect(sso.content.length).toBe(1);
expect(sso.content[0].name).toBe("atom-material-ui");
// TODO test object structure to known good
expect(sso).toMatchEndpointSuccessObject(endpoint);
await database.removePackageByName("atom-material-ui", true);
});
});
7 changes: 5 additions & 2 deletions tests/http/getThemesSearch.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ describe("Behaves as expected", () => {
test("Returns array on success", async () => {
const newPack = await database.insertNewPackage({
name: "atom-material-syntax",
repository: "https://github.com/confused-Techie/package-backend",
repository: {
url: "https://github.com/confused-Techie/package-backend",
type: "git"
},
creation_method: "Test Package",
releases: {
latest: "1.1.0"
Expand Down Expand Up @@ -69,7 +72,7 @@ describe("Behaves as expected", () => {
expect(sso.content).toBeArray();
expect(sso.content.length).toBe(1);
expect(sso.content[0].name).toBe("atom-material-syntax");
// TODO ensure it matches known good object
expect(sso).toMatchEndpointSuccessObject(endpoint);
await database.removePackageByName("atom-material-syntax", true);
});

Expand Down
29 changes: 23 additions & 6 deletions tests/models/packageObjectFull.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,29 @@ module.exports = {
name: Joi.string().required(),
readme: Joi.string().required(),
metadata: Joi.object().required(),
releases: Joi.object().required(),
releases: Joi.object({
latest: Joi.string().required()
}).required(),
versions: Joi.object().required(),
repository: Joi.object().required(),
creation_method: Joi.string().required(),
downloads: Joi.string().required(),
stargazers_count: Joi.string().required(),
repository: Joi.object({
url: Joi.string().required(),
type: Joi.string().valid(
"git",
"bit",
"sfr",
"lab",
"berg",
"unknown",
"na"
).required()
}).required(),
creation_method: Joi.string().valid(
"User Made Package",
"Migrated from Atom.io",
"Test Package" // Should only be used during tests
).required(),
downloads: Joi.string().pattern(/^[0-9]+$/).required(),
stargazers_count: Joi.string().pattern(/^[0-9]+$/).required(),
badges: Joi.array().items(
Joi.object({
title: Joi.string().valid(
Expand All @@ -107,5 +124,5 @@ module.exports = {
link: Joi.string()
})
).required()
})
}).required()
};
12 changes: 12 additions & 0 deletions tests/models/packageObjectFullArray.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
schema: {

},
example: [
require("./packageObjectFull.js").example
]
test:
Joi.array().items(
require("./packageObjectFull.js").test
).required()
};
131 changes: 131 additions & 0 deletions tests/models/packageObjectShort.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
module.exports = {
schema: {
description: "A 'Package Object Short' of a package on the PPR.",
type: "object",
required: [
"name", "readme", "metadata", "repository", "downloads", "stargazers_count",
"releases", "badges"
],
properties: {
name: { type: "string" },
readme: { type: "string" },
metadata: { type: "object" },
repository: { type: "object" },
creation_method: { type: "string" },
downloads: { type: "string" },
stargazers_count: { type: "string" },
releases: { type: "object" },
badges: { type: "array" }
}
},
example: {
// Example taken from `platformio-ide-terminal`
name: "platformio-ide-terminal",
readme: "This is the full content of a readme file!",
metadata: {
main: "./lib/plaformio-ide-terminal",
name: "platformio-ide-terminal",
// This could be an author object
author: "Jeremy Ebneyamin",
engines: {
atom: ">=1.12.2 <2.0.0"
},
license: "MIT",
version: "2.10.1",
homepage: "https://atom.io/packages/platformio=ide-terminal",
keywords: [
"PlatformIO",
"terminal-plus",
"terminal"
],
repository: "https://github.com/platformio/platformio-iatom-ide-terminal",
description: "A terminal package for Atom, complete with themes, API and more for PlatformIO IDE. Fork of terminal-plus.",
contributors: [
{
url: "http://platformio.org",
name: "Ivan Kravets",
email: "[email protected]"
}
],
dependencies: {
"term.js": "https://github.com/jeremyramin/term.js/tarball/master",
underscore: "^1.8.3",
"atom-psace-pen-views": "^2.2.0",
"node-pty-prebuilt-multiarch": "^0.9.0"
},
activationHooks: [
"core:loaded-shell-encironmnet"
],
consumedServices: {
"status-bar": {
versions: {
"^1.0.0": "consumeStatusBar"
}
}
},
providedServices: {
runInTerminal: {
versions: {
"0.14.5": "provideRunInTerminal"
},
description: "Deprecated API for PlatformIO IDE 1.0"
}
}
},
repository: {
url: "https://github.com/platformio/platformio-atom-ide-terminal",
type: "git"
},
creation_method: "User Made Package",
downloads: "16997915",
stargazers_count: "1114",
releases: {
latest: "2.10.1"
},
badges: []
},
test:
Joi.object({
name: Joi.string().required(),
readme: Joi.string().required(),
metadata: Joi.object().required(),
releases: Joi.object({
latest: Joi.string().required()
}).required(),
repository: Joi.object({
url: Joi.string().required(),
type: Joi.string().valid(
"git",
"bit",
"sfr",
"lab",
"berg",
"unknown",
"na"
).required()
}).required(),
creation_method: Joi.string().valid(
"User Made Package",
"Migrated from Atom.io",
"Test Package" // Should only be used during tests
).required(),
downloads: Joi.string().pattern(/^[0-9]+$/).required(),
stargazers_count: Joi.string().pattern(/^[0-9]+$/).required(),
badges:Joi.array().items(
Joi.object({
title: Joi.string().valid(
"Outdated",
"Made for Pulsar!",
"Broken",
"Archived",
"Deprecated"
).required(),
type: Joi.string().valid(
"warn", "info", "success"
).required(),
text: Joi.string(),
link: Joi.string()
})
).required()
}).required()
};
12 changes: 12 additions & 0 deletions tests/models/packageObjectShortArray.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
schema: {

},
example: [
require("./packageObjectShort.js").example
],
test:
Joi.array().items(
require("./packageObjectShort.js").test
).required()
};

0 comments on commit 2ea0e16

Please sign in to comment.