|
| 1 | +import { suite } from "uvu"; |
| 2 | +import { equal } from "uvu/assert"; |
| 3 | +import simple from "simple-mock"; |
| 4 | + |
| 5 | +import { runScriptAgainstRepositories } from "../lib/run-script-against-resolved-repositories.js"; |
| 6 | + |
| 7 | +const runAgainstRepos = suite('run script against repositories'); |
| 8 | + |
| 9 | +const userOptions = {}; |
| 10 | +const octoherdCliRepository = {id: 123, owner: {login: 'octoherd'}, name: 'cli', full_name: 'octoherd/cli'}; |
| 11 | + |
| 12 | +runAgainstRepos('run the script against the provided repositories', async () => { |
| 13 | + const octokitInfoLogger = simple.spy(() => undefined); |
| 14 | + const octokit = {log: {info: octokitInfoLogger}}; |
| 15 | + const octokitCoreRepository = {id: 456, owner: {login: 'octokit'}, name: 'core.js', full_name: 'octokit/core.js'}; |
| 16 | + const repositories = [octoherdCliRepository, octokitCoreRepository]; |
| 17 | + const script = simple.spy(() => undefined); |
| 18 | + |
| 19 | + await runScriptAgainstRepositories(octokit, repositories, script, userOptions); |
| 20 | + |
| 21 | + repositories.forEach((repository, index) => { |
| 22 | + equal(script.calls[index].args, [octokit, repository, userOptions]); |
| 23 | + equal(octokitInfoLogger.calls[index].args, [{octoherd: true}, "Running on %s ...", repository.full_name]); |
| 24 | + }); |
| 25 | +}); |
| 26 | + |
| 27 | +runAgainstRepos('set logger context when available', async () => { |
| 28 | + const octokitLoggerContextSetter = simple.spy(() => undefined); |
| 29 | + const octokit = {log: {info: () => undefined, setContext: octokitLoggerContextSetter}}; |
| 30 | + const octokitCoreRepository = {id: 456, owner: {login: 'octokit'}, name: 'core.js', full_name: 'octokit/core.js'}; |
| 31 | + const repositories = [octoherdCliRepository, octokitCoreRepository]; |
| 32 | + const script = simple.spy(() => undefined); |
| 33 | + |
| 34 | + await runScriptAgainstRepositories(octokit, repositories, script, userOptions); |
| 35 | + |
| 36 | + repositories.forEach((repository, index) => equal( |
| 37 | + octokitLoggerContextSetter.calls[index].args, |
| 38 | + [{repository: {id: repository.id, owner: repository.owner, name: repository.name}}] |
| 39 | + )); |
| 40 | +}); |
| 41 | + |
| 42 | +runAgainstRepos('log cancelled routes at debug level', async () => { |
| 43 | + const repositories = [octoherdCliRepository]; |
| 44 | + const errorMessage = 'error message'; |
| 45 | + const cancelledRouteError = new Error(errorMessage); |
| 46 | + cancelledRouteError.cancel = true; |
| 47 | + const octokitDebugLogger = simple.spy(() => undefined); |
| 48 | + const octokit = {log: {info: () => undefined, debug: octokitDebugLogger}}; |
| 49 | + const script = simple.spy(() => undefined).throwWith(cancelledRouteError); |
| 50 | + |
| 51 | + await runScriptAgainstRepositories(octokit, repositories, script, userOptions); |
| 52 | + |
| 53 | + equal(octokitDebugLogger.calls[0].args, [errorMessage]); |
| 54 | +}); |
| 55 | + |
| 56 | +runAgainstRepos('throw other errors', async () => { |
| 57 | + const repositories = [octoherdCliRepository]; |
| 58 | + const error = new Error(); |
| 59 | + const octokit = {log: {info: () => undefined}}; |
| 60 | + const script = simple.spy(() => undefined).throwWith(error); |
| 61 | + |
| 62 | + try { |
| 63 | + await runScriptAgainstRepositories(octokit, repositories, script, userOptions); |
| 64 | + } catch (err) { |
| 65 | + equal(err, error); |
| 66 | + } |
| 67 | +}); |
| 68 | + |
| 69 | +runAgainstRepos.run(); |
0 commit comments