input-helper.test.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import * as assert from 'assert'
  2. import * as path from 'path'
  3. import {ISourceSettings} from '../lib/git-source-provider'
  4. const originalGitHubWorkspace = process.env['GITHUB_WORKSPACE']
  5. const gitHubWorkspace = path.resolve('/checkout-tests/workspace')
  6. // Late bind
  7. let inputHelper: any
  8. // Mock @actions/core
  9. let inputs = {} as any
  10. const mockCore = jest.genMockFromModule('@actions/core') as any
  11. mockCore.getInput = (name: string) => {
  12. return inputs[name]
  13. }
  14. // Mock @actions/github
  15. const mockGitHub = jest.genMockFromModule('@actions/github') as any
  16. mockGitHub.context = {
  17. repo: {
  18. owner: 'some-owner',
  19. repo: 'some-repo'
  20. },
  21. ref: 'refs/heads/some-ref',
  22. sha: '1234567890123456789012345678901234567890'
  23. }
  24. // Mock ./fs-helper
  25. const mockFSHelper = jest.genMockFromModule('../lib/fs-helper') as any
  26. mockFSHelper.directoryExistsSync = (path: string) => path == gitHubWorkspace
  27. describe('input-helper tests', () => {
  28. beforeAll(() => {
  29. // GitHub workspace
  30. process.env['GITHUB_WORKSPACE'] = gitHubWorkspace
  31. // Mocks
  32. jest.setMock('@actions/core', mockCore)
  33. jest.setMock('@actions/github', mockGitHub)
  34. jest.setMock('../lib/fs-helper', mockFSHelper)
  35. // Now import
  36. inputHelper = require('../lib/input-helper')
  37. })
  38. beforeEach(() => {
  39. // Reset inputs
  40. inputs = {}
  41. })
  42. afterAll(() => {
  43. // Reset GitHub workspace
  44. delete process.env['GITHUB_WORKSPACE']
  45. if (originalGitHubWorkspace) {
  46. process.env['GITHUB_WORKSPACE'] = originalGitHubWorkspace
  47. }
  48. // Reset modules
  49. jest.resetModules()
  50. })
  51. it('sets defaults', () => {
  52. const settings: ISourceSettings = inputHelper.getInputs()
  53. expect(settings).toBeTruthy()
  54. expect(settings.accessToken).toBeFalsy()
  55. expect(settings.clean).toBe(true)
  56. expect(settings.commit).toBeTruthy()
  57. expect(settings.commit).toBe('1234567890123456789012345678901234567890')
  58. expect(settings.fetchDepth).toBe(1)
  59. expect(settings.lfs).toBe(false)
  60. expect(settings.ref).toBe('refs/heads/some-ref')
  61. expect(settings.repositoryName).toBe('some-repo')
  62. expect(settings.repositoryOwner).toBe('some-owner')
  63. expect(settings.repositoryPath).toBe(gitHubWorkspace)
  64. })
  65. it('requires qualified repo', () => {
  66. inputs.repository = 'some-unqualified-repo'
  67. assert.throws(() => {
  68. inputHelper.getInputs()
  69. }, /Invalid repository 'some-unqualified-repo'/)
  70. })
  71. it('roots path', () => {
  72. inputs.path = 'some-directory/some-subdirectory'
  73. const settings: ISourceSettings = inputHelper.getInputs()
  74. expect(settings.repositoryPath).toBe(
  75. path.join(gitHubWorkspace, 'some-directory', 'some-subdirectory')
  76. )
  77. })
  78. it('sets correct default ref/sha for other repo', () => {
  79. inputs.repository = 'some-owner/some-other-repo'
  80. const settings: ISourceSettings = inputHelper.getInputs()
  81. expect(settings.ref).toBe('refs/heads/master')
  82. expect(settings.commit).toBeFalsy()
  83. })
  84. it('sets ref to empty when explicit sha', () => {
  85. inputs.ref = '1111111111222222222233333333334444444444'
  86. const settings: ISourceSettings = inputHelper.getInputs()
  87. expect(settings.ref).toBeFalsy()
  88. expect(settings.commit).toBe('1111111111222222222233333333334444444444')
  89. })
  90. it('sets sha to empty when explicit ref', () => {
  91. inputs.ref = 'refs/heads/some-other-ref'
  92. const settings: ISourceSettings = inputHelper.getInputs()
  93. expect(settings.ref).toBe('refs/heads/some-other-ref')
  94. expect(settings.commit).toBeFalsy()
  95. })
  96. it('gives good error message for submodules input', () => {
  97. inputs.submodules = 'true'
  98. assert.throws(() => {
  99. inputHelper.getInputs()
  100. }, /The input 'submodules' is not supported/)
  101. })
  102. })