Skip to content

Commit

Permalink
Merge pull request #3 from bun913/feat/add-jsonify-tests
Browse files Browse the repository at this point in the history
Feat/add jsonify tests
  • Loading branch information
bun913 authored Aug 24, 2024
2 parents eb78e0e + 7939a5e commit 8c1aad8
Show file tree
Hide file tree
Showing 9 changed files with 189 additions and 81 deletions.
19 changes: 19 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Test

on: [push]

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
2 changes: 1 addition & 1 deletion lib/TestrailReporter.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const requiredOptions = ["domain", "username", "apikey", "projectId"]

class TestRailReporter {
constructor(emitter, reporterOptions, options) {
this.results = []
emitter.on("beforeDone", (err, args) => {
this.onComplete(err, args)
})
Expand All @@ -28,7 +29,6 @@ class TestRailReporter {
})

if (!hasMissingOptions) {
this.results = []
this.jsonifyResults(args.summary.run.executions)
this.pushToTestrail(args.summary)
}
Expand Down
2 changes: 2 additions & 0 deletions lib/environment.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ function getEnv() {
env.includeAll = process.env.TESTRAIL_INCLUDEALL || "true"
env.steps = process.env.TESTRAIL_STEPS || "false"
env.logging = process.env.TESTRAIL_LOGGING || "full"
// TODO: define status ids as enum like constants
// ref: https://docs.testrail.techmatrix.jp/testrail/docs/702/api/reference/statuses/
env.pass_id = process.env.TESTRAIL_PASSED_ID || 1
env.fail_id = process.env.TESTRAIL_FAILED_ID || 5
env.skipped_id = process.env.TESTRAIL_SKIPPED_ID || 4
Expand Down
4 changes: 2 additions & 2 deletions lib/logger.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const environment = require("./environment")
const getEnv = require("./environment")

class Logger {
getLogging(execution) {
this.env = environment
this.env = getEnv()
const log = { url: "", request: "", response: "" }

const urlObject = execution.request.url
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"description": "TestRail reporter for Newman",
"main": "lib/index.js",
"scripts": {
"test": "vitest ./test --silent",
"test": "vitest ./test",
"test-ci": "vitest run ./test --silent",
"format": "biome format --write",
"check": "biome ci . --linter-enabled=false",
Expand Down
151 changes: 151 additions & 0 deletions test/TestrailReporter.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { afterEach, describe, expect, it, vi } from "vitest"
import TestrailReporter from "../lib/TestrailReporter"
import getEnv from "../lib/environment"
import { makeSampleEmitter } from "./utils/emitter"
import { setEnvVars } from "./utils/env"
import makeNewmanResult from "./utils/newman"

describe("TestrailReporter", () => {
describe("onComplete", () => {
Expand Down Expand Up @@ -86,4 +89,152 @@ describe("TestrailReporter", () => {
})
})
})

describe("jsonifyResults", () => {
afterEach(() => {
vi.restoreAllMocks()
vi.unstubAllEnvs()
})

describe("converts newwman test results to TestRail-compatible JSON format", () => {
it("converts a test result to one TestRail test run", () => {
// arrange
setEnvVars(vi)
const sut = new TestrailReporter(makeSampleEmitter(vi.fn()), {}, {})
sut.env = getEnv()
const executions = makeNewmanResult()

// act
sut.jsonifyResults(executions)

// assert
expect(sut.results).lengthOf(1)
expect(sut.results[0].case_id).toBe("01")
})

it("converts two mapped test case to two TestRail testruns", () => {
// arrange
setEnvVars(vi)
const sut = new TestrailReporter(makeSampleEmitter(vi.fn()), {}, {})
sut.env = getEnv()
const executions = makeNewmanResult({ caseNumbers: "C01 C02" })

// act
sut.jsonifyResults(executions)

// assert
expect(sut.results).lengthOf(2)
expect(sut.results[0].case_id).toBe("01")
expect(sut.results[1].case_id).toBe("02")
})

it("converts two test cases to two TestRail test runs", () => {
// arrange
setEnvVars(vi)
const sut = new TestrailReporter(makeSampleEmitter(vi.fn()), {}, {})
sut.env = getEnv()
const executions = makeNewmanResult().concat(
makeNewmanResult({ caseNumbers: "C02" }),
)

// act
sut.jsonifyResults(executions)

// assert
expect(sut.results).lengthOf(2)
expect(sut.results[0].case_id).toBe("01")
expect(sut.results[1].case_id).toBe("02")
})
})

describe("failed test case handling", () => {
it("converts a failed test case to a failed TestRail test run", () => {
// arrange
setEnvVars(vi)
const sut = new TestrailReporter(makeSampleEmitter(vi.fn()), {}, {})
sut.env = getEnv()
const executions = makeNewmanResult({ error: true })

// act
sut.jsonifyResults(executions)

// assert
expect(sut.results).lengthOf(1)
expect(sut.results[0].case_id).toBe("01")
// status_id: https://docs.testrail.techmatrix.jp/testrail/docs/702/api/reference/statuses/
expect(sut.results[0].status_id).toBe(5)
})
})

describe("skipped test case handling", () => {
it("converts a skipped test case to a skipped TestRail test run", () => {
// arrange
setEnvVars(vi)
const sut = new TestrailReporter(makeSampleEmitter(vi.fn()), {}, {})
sut.env = getEnv()
const executions = makeNewmanResult({ skipped: true })

// act
sut.jsonifyResults(executions)

// assert
expect(sut.results).lengthOf(1)
expect(sut.results[0].case_id).toBe("01")
// status_id: https://docs.testrail.techmatrix.jp/testrail/docs/702/api/reference/statuses/
expect(sut.results[0].status_id).toBe(4)
})
})

describe("umarked test case handling", () => {
it("skip when not including test caseid top of the test case title", () => {
// arrange
setEnvVars(vi)
const sut = new TestrailReporter(makeSampleEmitter(vi.fn()), {}, {})
sut.env = getEnv()
const executions = makeNewmanResult({ caseNumbers: "" })

// act
sut.jsonifyResults(executions)

// assert
expect(sut.results).lengthOf(0)
})
})

describe("test rail v1 API", () => {
it("works for TestRail v1 api", () => {
// arrange
setEnvVars(vi)
const sut = new TestrailReporter(makeSampleEmitter(vi.fn()), {}, {})
sut.env = getEnv()
const executions = makeNewmanResult({ tldOnly: true })

// act
sut.jsonifyResults(executions)

// assert
console.log(sut.results)
expect(sut.results).lengthOf(1)
expect(sut.results[0].case_id).toBe("01")
expect(sut.results[0].status_id).toBe(1)
})
})

describe("custome env value", () => {
it("include a custom_key_value in result json when TESTRAIL_CUSTOM_$HOGE setted", () => {
// arrange
setEnvVars(vi)
vi.stubEnv("TESTRAIL_CUSTOM_customenvvar", "123")
const sut = new TestrailReporter(makeSampleEmitter(vi.fn()), {}, {})
sut.env = getEnv()
const executions = makeNewmanResult({ tldOnly: true })

// act
sut.jsonifyResults(executions)

// assert
expect(sut.results[0].customenvvar).toBe("123")
})
})
})
})
76 changes: 0 additions & 76 deletions test/assertions.js

This file was deleted.

12 changes: 12 additions & 0 deletions test/utils/env.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export const setEnvVars = (vi, setEnvs = {}) => {
// set required environment variables
vi.stubEnv("TESTRAIL_DOMAIN", "example.com")
vi.stubEnv("TESTRAIL_USERNAME", "dummyUser")
vi.stubEnv("TESTRAIL_APIKEY", "hogeApiKey")
vi.stubEnv("TESTRAIL_PROJECTID", "testProjectId")

// set env if provided
Object.keys(setEnvs).forEach((key) => {
vi.stubEnv(key, setEnvs[key])
})
}
2 changes: 1 addition & 1 deletion test/lib.js → test/utils/newman.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = function generateJson({
module.exports = function makeNewmanResult({
caseNumbers = "C01",
error = false,
skipped = false,
Expand Down

0 comments on commit 8c1aad8

Please sign in to comment.