diff --git a/__test__/url-helper.test.ts b/__test__/url-helper.test.ts
new file mode 100644
index 0000000..4c7e59c
--- /dev/null
+++ b/__test__/url-helper.test.ts
@@ -0,0 +1,46 @@
+import * as urlHelper from '../lib/url-helper'
+
+import { IGitSourceSettings } from '../lib/git-source-settings';
+
+function getSettings(u: string): IGitSourceSettings {
+  return {
+    githubServerUrl: u,
+    repositoryPath: '',
+    repositoryOwner: 'some-owner',
+    repositoryName: 'some-name',
+    ref: '', commit: '', clean: false, filter: undefined,
+    sparseCheckout: [], sparseCheckoutConeMode: false,
+    fetchDepth: 0, fetchTags: false, showProgress: false,
+    lfs: false, submodules: false, nestedSubmodules: false,
+    authToken: '', sshKey: '', sshKnownHosts: '', sshStrict: false,
+    persistCredentials: false, workflowOrganizationId: undefined,
+    setSafeDirectory: false
+  }
+}
+describe('url-helper tests', () => {
+  it('getFetchUrl works on GitHub repos', async () => {
+    expect(urlHelper.getFetchUrl(getSettings('https://github.com'))).toBe(
+      "https://github.com/some-owner/some-name"
+    )
+  })
+
+  it('getFetchUrl works on 3rd party repos with sub-path', async () => {
+    expect(urlHelper.getFetchUrl(getSettings('https://other.com/subpath'))).toBe(
+      'https://other.com/subpath/some-owner/some-name'
+    )
+  })
+
+  it('getFetchUrl works on 3rd party repos with ssh keys', async () => {
+    expect(urlHelper.getFetchUrl(getSettings('https://other.com/subpath'))).toBe(
+      'https://other.com/subpath/some-owner/some-name'
+    )
+  })
+
+  it('getFetchUrl works with ssh credentials', async () => {
+    let settings = getSettings('https://other.com/subpath');
+    settings.sshKey = 'not-empty'
+    expect(urlHelper.getFetchUrl(settings)).toBe(
+      'git@other.com:some-owner/some-name.git'
+    )
+  })
+})