mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-17 17:10:05 +00:00
chore(*): refactor and add tests
This commit is contained in:
13
cypress.json
13
cypress.json
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"defaultCommandTimeout": 10000,
|
|
||||||
"chromeWebSecurity": false,
|
|
||||||
"screenshotOnRunFailure": false,
|
|
||||||
"env": {
|
|
||||||
"serverUrl": "",
|
|
||||||
"appLoc": "/Public/app",
|
|
||||||
"serverType": "SAS9",
|
|
||||||
"debug": false,
|
|
||||||
"username": "",
|
|
||||||
"password": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
188
jest.config.js
188
jest.config.js
@@ -1,10 +1,184 @@
|
|||||||
|
// For a detailed explanation regarding each configuration property, visit:
|
||||||
|
// https://jestjs.io/docs/en/configuration.html
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
roots: ["<rootDir>/src"],
|
testTimeout: 90000,
|
||||||
testMatch: [
|
// All imported modules in your tests should be mocked automatically
|
||||||
"**/__tests__/**/*.+(ts|tsx|js)",
|
// automock: false,
|
||||||
"**/?(*.)+(spec|test).+(ts|tsx|js)"
|
|
||||||
],
|
// Stop running tests after `n` failures
|
||||||
|
// bail: 1,
|
||||||
|
|
||||||
|
// Respect "browser" field in package.json when resolving modules
|
||||||
|
// browser: false,
|
||||||
|
|
||||||
|
// The directory where Jest should store its cached dependency information
|
||||||
|
// cacheDirectory: "/private/var/folders/7y/nmqg1srj29q6210rs9dfsdzc0000gn/T/jest_dx",
|
||||||
|
|
||||||
|
// Automatically clear mock calls and instances between every test
|
||||||
|
clearMocks: true,
|
||||||
|
|
||||||
|
// Indicates whether the coverage information should be collected while executing the test
|
||||||
|
// collectCoverage: false,
|
||||||
|
|
||||||
|
// An array of glob patterns indicating a set of files for which coverage information should be collected
|
||||||
|
// collectCoverageFrom: undefined,
|
||||||
|
|
||||||
|
// The directory where Jest should output its coverage files
|
||||||
|
coverageDirectory: 'coverage',
|
||||||
|
|
||||||
|
// An array of regexp pattern strings used to skip coverage collection
|
||||||
|
// coveragePathIgnorePatterns: [
|
||||||
|
// "/node_modules/"
|
||||||
|
// ],
|
||||||
|
|
||||||
|
// A list of reporter names that Jest uses when writing coverage reports
|
||||||
|
// coverageReporters: [
|
||||||
|
// "json",
|
||||||
|
// "text",
|
||||||
|
// "lcov",
|
||||||
|
// "clover"
|
||||||
|
// ],
|
||||||
|
|
||||||
|
// An object that configures minimum threshold enforcement for coverage results
|
||||||
|
// coverageThreshold: undefined,
|
||||||
|
|
||||||
|
// A path to a custom dependency extractor
|
||||||
|
// dependencyExtractor: undefined,
|
||||||
|
|
||||||
|
// Make calling deprecated APIs throw helpful error messages
|
||||||
|
// errorOnDeprecated: false,
|
||||||
|
|
||||||
|
// Force coverage collection from ignored files using an array of glob patterns
|
||||||
|
// forceCoverageMatch: [],
|
||||||
|
|
||||||
|
// A path to a module which exports an async function that is triggered once before all test suites
|
||||||
|
// globalSetup: undefined,
|
||||||
|
|
||||||
|
// A path to a module which exports an async function that is triggered once after all test suites
|
||||||
|
// globalTeardown: undefined,
|
||||||
|
|
||||||
|
// A set of global variables that need to be available in all test environments
|
||||||
|
// globals: {},
|
||||||
|
|
||||||
|
// The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
|
||||||
|
// maxWorkers: "50%",
|
||||||
|
|
||||||
|
// An array of directory names to be searched recursively up from the requiring module's location
|
||||||
|
// moduleDirectories: [
|
||||||
|
// "node_modules"
|
||||||
|
// ],
|
||||||
|
|
||||||
|
// An array of file extensions your modules use
|
||||||
|
// moduleFileExtensions: [
|
||||||
|
// "js",
|
||||||
|
// "json",
|
||||||
|
// "jsx",
|
||||||
|
// "ts",
|
||||||
|
// "tsx",
|
||||||
|
// "node"
|
||||||
|
// ],
|
||||||
|
|
||||||
|
// A map from regular expressions to module names that allow to stub out resources with a single module
|
||||||
|
moduleNameMapper: {},
|
||||||
|
|
||||||
|
// An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
|
||||||
|
// modulePathIgnorePatterns: [],
|
||||||
|
|
||||||
|
// Activates notifications for test results
|
||||||
|
// notify: false,
|
||||||
|
|
||||||
|
// An enum that specifies notification mode. Requires { notify: true }
|
||||||
|
// notifyMode: "failure-change",
|
||||||
|
|
||||||
|
// A preset that is used as a base for Jest's configuration
|
||||||
|
preset: 'ts-jest/presets/js-with-ts',
|
||||||
|
|
||||||
|
// Run tests from one or more projects
|
||||||
|
// projects: undefined,
|
||||||
|
|
||||||
|
// Use this configuration option to add custom reporters to Jest
|
||||||
|
// reporters: undefined,
|
||||||
|
|
||||||
|
// Automatically reset mock state between every test
|
||||||
|
// resetMocks: false,
|
||||||
|
|
||||||
|
// Reset the module registry before running each individual test
|
||||||
|
// resetModules: false,
|
||||||
|
|
||||||
|
// A path to a custom resolver
|
||||||
|
// resolver: undefined,
|
||||||
|
|
||||||
|
// Automatically restore mock state between every test
|
||||||
|
// restoreMocks: false,
|
||||||
|
|
||||||
|
// The root directory that Jest should scan for tests and modules within
|
||||||
|
// rootDir: undefined,
|
||||||
|
|
||||||
|
// A list of paths to directories that Jest should use to search for files in
|
||||||
|
// roots: [
|
||||||
|
// "<rootDir>"
|
||||||
|
// ],
|
||||||
|
|
||||||
|
// Allows you to use a custom runner instead of Jest's default test runner
|
||||||
|
// runner: "jest-runner",
|
||||||
|
|
||||||
|
// The paths to modules that run some code to configure or set up the testing environment before each test
|
||||||
|
setupFiles: [],
|
||||||
|
|
||||||
|
// A list of paths to modules that run some code to configure or set up the testing framework before each test
|
||||||
|
setupFilesAfterEnv: ['jest-extended'],
|
||||||
|
|
||||||
|
// A list of paths to snapshot serializer modules Jest should use for snapshot testing
|
||||||
|
// snapshotSerializers: [],
|
||||||
|
|
||||||
|
// Options that will be passed to the testEnvironment
|
||||||
|
// testEnvironmentOptions: {},
|
||||||
|
|
||||||
|
// Adds a location field to test results
|
||||||
|
// testLocationInResults: false,
|
||||||
|
|
||||||
|
// The glob patterns Jest uses to detect test files
|
||||||
|
testMatch: ['**/*spec.[j|t]s?(x)'],
|
||||||
|
|
||||||
|
// An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
|
||||||
|
testPathIgnorePatterns: ['/node_modules/', '/build'],
|
||||||
|
|
||||||
|
// The regexp pattern or array of patterns that Jest uses to detect test files
|
||||||
|
// testRegex: [],
|
||||||
|
|
||||||
|
// This option allows the use of a custom results processor
|
||||||
|
// testResultsProcessor: undefined,
|
||||||
|
|
||||||
|
// This option allows use of a custom test runner
|
||||||
|
// testRunner: "jasmine2",
|
||||||
|
|
||||||
|
// This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
|
||||||
|
// testURL: "http://localhost",
|
||||||
|
|
||||||
|
// Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
|
||||||
|
// timers: "real",
|
||||||
|
|
||||||
|
// A map from regular expressions to paths to transformers
|
||||||
transform: {
|
transform: {
|
||||||
"^.+\\.(ts|tsx)$": "ts-jest"
|
'^.+\\.ts?$': 'ts-jest'
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
|
||||||
|
// transformIgnorePatterns: [
|
||||||
|
// '**/test/**/*.ts?(x)',
|
||||||
|
// '**/?(*.)+(spec|test).ts?(x)'
|
||||||
|
// ]
|
||||||
|
|
||||||
|
// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
|
||||||
|
// unmockedModulePathPatterns: undefined,
|
||||||
|
|
||||||
|
// Indicates whether each individual test should be reported during the run
|
||||||
|
// verbose: undefined,
|
||||||
|
|
||||||
|
// An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
|
||||||
|
// watchPathIgnorePatterns: [],
|
||||||
|
|
||||||
|
// Whether to use watchman for file crawling
|
||||||
|
// watchman: true,
|
||||||
|
}
|
||||||
|
|||||||
2750
package-lock.json
generated
2750
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
12
package.json
12
package.json
@@ -7,7 +7,7 @@
|
|||||||
"publish:lib": "npm run build && cd build && npm publish",
|
"publish:lib": "npm run build && cd build && npm publish",
|
||||||
"lint:fix": "npx prettier --write 'src/**/*.{ts,tsx,js,jsx,html,css,sass,less,json,yml,md,graphql}'",
|
"lint:fix": "npx prettier --write 'src/**/*.{ts,tsx,js,jsx,html,css,sass,less,json,yml,md,graphql}'",
|
||||||
"lint": "npx prettier --check 'src/**/*.{ts,tsx,js,jsx,html,css,sass,less,json,yml,md,graphql}'",
|
"lint": "npx prettier --check 'src/**/*.{ts,tsx,js,jsx,html,css,sass,less,json,yml,md,graphql}'",
|
||||||
"test": "jest --coverage",
|
"test": "jest --silent --coverage",
|
||||||
"prepublishOnly": "cp -r ./build/* . && rm -rf ./build",
|
"prepublishOnly": "cp -r ./build/* . && rm -rf ./build",
|
||||||
"postpublish": "git clean -fd",
|
"postpublish": "git clean -fd",
|
||||||
"semantic-release": "semantic-release",
|
"semantic-release": "semantic-release",
|
||||||
@@ -36,19 +36,17 @@
|
|||||||
},
|
},
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/isomorphic-fetch": "0.0.35",
|
|
||||||
"@types/jest": "^26.0.20",
|
"@types/jest": "^26.0.20",
|
||||||
"cp": "^0.2.0",
|
"cp": "^0.2.0",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"jest": "^25.5.4",
|
"jest": "^26.6.3",
|
||||||
|
"jest-extended": "^0.11.5",
|
||||||
"path": "^0.12.7",
|
"path": "^0.12.7",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"semantic-release": "^17.3.1",
|
"semantic-release": "^17.3.1",
|
||||||
"terser-webpack-plugin": "^4.2.3",
|
"terser-webpack-plugin": "^4.2.3",
|
||||||
"ts-jest": "^25.5.1",
|
"ts-jest": "^25.5.1",
|
||||||
"ts-loader": "^8.0.14",
|
"ts-loader": "^8.0.14",
|
||||||
"tslint": "^6.1.3",
|
|
||||||
"tslint-config-prettier": "^1.18.0",
|
|
||||||
"typedoc": "^0.19.2",
|
"typedoc": "^0.19.2",
|
||||||
"typedoc-neo-theme": "^1.0.10",
|
"typedoc-neo-theme": "^1.0.10",
|
||||||
"typedoc-plugin-external-module-name": "^4.0.6",
|
"typedoc-plugin-external-module-name": "^4.0.6",
|
||||||
@@ -60,8 +58,6 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sasjs/utils": "^2.0.2",
|
"@sasjs/utils": "^2.0.2",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"es6-promise": "^4.2.8",
|
"form-data": "^3.0.0"
|
||||||
"form-data": "^3.0.0",
|
|
||||||
"isomorphic-fetch": "^2.2.1"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import { ServerType } from '@sasjs/utils/types'
|
||||||
import axios, { AxiosInstance } from 'axios'
|
import axios, { AxiosInstance } from 'axios'
|
||||||
import { isAuthorizeFormRequired, parseAndSubmitAuthorizeForm } from '.'
|
import { isAuthorizeFormRequired, parseAndSubmitAuthorizeForm } from '.'
|
||||||
import { ServerType } from '../types'
|
|
||||||
import { serialize } from '../utils'
|
import { serialize } from '../utils'
|
||||||
|
|
||||||
export class AuthManager {
|
export class AuthManager {
|
||||||
@@ -16,7 +16,7 @@ export class AuthManager {
|
|||||||
this.httpClient = axios.create({ baseURL: this.serverUrl })
|
this.httpClient = axios.create({ baseURL: this.serverUrl })
|
||||||
this.loginUrl = `/SASLogon/login`
|
this.loginUrl = `/SASLogon/login`
|
||||||
this.logoutUrl =
|
this.logoutUrl =
|
||||||
this.serverType === ServerType.SAS9
|
this.serverType === ServerType.Sas9
|
||||||
? '/SASLogon/logout?'
|
? '/SASLogon/logout?'
|
||||||
: '/SASLogon/logout.do?'
|
: '/SASLogon/logout.do?'
|
||||||
}
|
}
|
||||||
@@ -89,13 +89,16 @@ export class AuthManager {
|
|||||||
* @returns - a promise which resolves with an object containing two values - a boolean `isLoggedIn`, and a string `userName`.
|
* @returns - a promise which resolves with an object containing two values - a boolean `isLoggedIn`, and a string `userName`.
|
||||||
*/
|
*/
|
||||||
public async checkSession() {
|
public async checkSession() {
|
||||||
const loginResponse = await axios.get(this.loginUrl.replace('.do', ''), {
|
const loginResponse = await this.httpClient.get(
|
||||||
responseType: 'text',
|
this.loginUrl.replace('.do', ''),
|
||||||
headers: {
|
{
|
||||||
Accept: '*/*'
|
responseType: 'text',
|
||||||
|
headers: {
|
||||||
|
Accept: '*/*'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
)
|
||||||
const responseText = await loginResponse.data
|
const responseText = loginResponse?.data
|
||||||
const isLoggedIn = /<button.+onClick.+logout/gm.test(responseText)
|
const isLoggedIn = /<button.+onClick.+logout/gm.test(responseText)
|
||||||
let loginForm: any = null
|
let loginForm: any = null
|
||||||
|
|
||||||
@@ -110,7 +113,7 @@ export class AuthManager {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getLoginForm(response: any) {
|
private getLoginForm(response: any) {
|
||||||
const pattern: RegExp = /<form.+action="(.*Logon[^"]*).*>/
|
const pattern: RegExp = /<form.+action="(.*Logon[^"]*).*>/
|
||||||
const matches = pattern.exec(response)
|
const matches = pattern.exec(response)
|
||||||
const formInputs: any = {}
|
const formInputs: any = {}
|
||||||
@@ -145,7 +148,7 @@ export class AuthManager {
|
|||||||
const loginUrl = tempLoginLink
|
const loginUrl = tempLoginLink
|
||||||
|
|
||||||
this.loginUrl =
|
this.loginUrl =
|
||||||
this.serverType === ServerType.SASViya
|
this.serverType === ServerType.SasViya
|
||||||
? tempLoginLink
|
? tempLoginLink
|
||||||
: loginUrl.replace('.do', '')
|
: loginUrl.replace('.do', '')
|
||||||
}
|
}
|
||||||
|
|||||||
170
src/auth/spec/AuthManager.spec.ts
Normal file
170
src/auth/spec/AuthManager.spec.ts
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
import { AuthManager } from '../AuthManager'
|
||||||
|
import * as dotenv from 'dotenv'
|
||||||
|
import * as authModule from '..'
|
||||||
|
import { ServerType } from '@sasjs/utils/types'
|
||||||
|
import axios from 'axios'
|
||||||
|
import {
|
||||||
|
mockLoginAuthoriseRequiredResponse,
|
||||||
|
mockLoginSuccessResponse
|
||||||
|
} from './mockResponses'
|
||||||
|
import { serialize } from '../../utils'
|
||||||
|
jest.mock('axios')
|
||||||
|
jest.mock('../parseAndSubmitAuthorizeForm')
|
||||||
|
const mockedAxios = axios as jest.Mocked<typeof axios>
|
||||||
|
|
||||||
|
describe('AuthManager', () => {
|
||||||
|
const authCallback = jest.fn().mockImplementation(() => Promise.resolve())
|
||||||
|
const serverUrl = 'http://test-server.com'
|
||||||
|
const serverType = ServerType.SasViya
|
||||||
|
const userName = 'test-username'
|
||||||
|
const password = 'test-password'
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
dotenv.config()
|
||||||
|
jest.restoreAllMocks()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should instantiate and set the correct URLs for a Viya server', () => {
|
||||||
|
const authManager = new AuthManager(serverUrl, serverType, authCallback)
|
||||||
|
|
||||||
|
expect(authManager).toBeTruthy()
|
||||||
|
expect((authManager as any).serverUrl).toEqual(serverUrl)
|
||||||
|
expect((authManager as any).serverType).toEqual(serverType)
|
||||||
|
expect((authManager as any).httpClient).toBeTruthy()
|
||||||
|
expect((authManager as any).loginUrl).toEqual(`/SASLogon/login`)
|
||||||
|
expect((authManager as any).logoutUrl).toEqual('/SASLogon/logout.do?')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should instantiate and set the correct URLs for a SAS9 server', () => {
|
||||||
|
const authCallback = () => Promise.resolve()
|
||||||
|
const serverType = ServerType.Sas9
|
||||||
|
|
||||||
|
const authManager = new AuthManager(serverUrl, serverType, authCallback)
|
||||||
|
|
||||||
|
expect(authManager).toBeTruthy()
|
||||||
|
expect((authManager as any).serverUrl).toEqual(serverUrl)
|
||||||
|
expect((authManager as any).serverType).toEqual(serverType)
|
||||||
|
expect((authManager as any).httpClient).toBeTruthy()
|
||||||
|
expect((authManager as any).loginUrl).toEqual(`/SASLogon/login`)
|
||||||
|
expect((authManager as any).logoutUrl).toEqual('/SASLogon/logout?')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should call the auth callback and return when already logged in', async (done) => {
|
||||||
|
const authManager = new AuthManager(serverUrl, serverType, authCallback)
|
||||||
|
jest.spyOn(authManager, 'checkSession').mockImplementation(() =>
|
||||||
|
Promise.resolve({
|
||||||
|
isLoggedIn: true,
|
||||||
|
userName: 'test',
|
||||||
|
loginForm: 'test'
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
const loginResponse = await authManager.logIn(userName, password)
|
||||||
|
|
||||||
|
expect(loginResponse.isLoggedIn).toBeTruthy()
|
||||||
|
expect(loginResponse.userName).toEqual(userName)
|
||||||
|
expect(authCallback).toHaveBeenCalledTimes(1)
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should post a login request to the server if not logged in', async (done) => {
|
||||||
|
const authManager = new AuthManager(serverUrl, serverType, authCallback)
|
||||||
|
jest.spyOn(authManager, 'checkSession').mockImplementation(() =>
|
||||||
|
Promise.resolve({
|
||||||
|
isLoggedIn: false,
|
||||||
|
userName: 'test',
|
||||||
|
loginForm: { name: 'test' }
|
||||||
|
})
|
||||||
|
)
|
||||||
|
mockedAxios.post.mockImplementation(() =>
|
||||||
|
Promise.resolve({ data: mockLoginSuccessResponse })
|
||||||
|
)
|
||||||
|
|
||||||
|
const loginResponse = await authManager.logIn(userName, password)
|
||||||
|
|
||||||
|
expect(loginResponse.isLoggedIn).toBeTruthy()
|
||||||
|
expect(loginResponse.userName).toEqual(userName)
|
||||||
|
|
||||||
|
const loginParams = serialize({
|
||||||
|
_service: 'default',
|
||||||
|
username: userName,
|
||||||
|
password,
|
||||||
|
name: 'test'
|
||||||
|
})
|
||||||
|
expect(mockedAxios.post).toHaveBeenCalledWith(
|
||||||
|
`/SASLogon/login`,
|
||||||
|
loginParams,
|
||||||
|
{
|
||||||
|
withCredentials: true,
|
||||||
|
responseType: 'text',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
|
Accept: '*/*'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
expect(authCallback).toHaveBeenCalledTimes(1)
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should parse and submit the authorisation form when necessary', async (done) => {
|
||||||
|
const authManager = new AuthManager(serverUrl, serverType, authCallback)
|
||||||
|
jest
|
||||||
|
.spyOn(authModule, 'parseAndSubmitAuthorizeForm')
|
||||||
|
.mockImplementation(() => Promise.resolve())
|
||||||
|
jest.spyOn(authManager, 'checkSession').mockImplementation(() =>
|
||||||
|
Promise.resolve({
|
||||||
|
isLoggedIn: false,
|
||||||
|
userName: 'test',
|
||||||
|
loginForm: { name: 'test' }
|
||||||
|
})
|
||||||
|
)
|
||||||
|
mockedAxios.post.mockImplementation(() =>
|
||||||
|
Promise.resolve({ data: mockLoginAuthoriseRequiredResponse })
|
||||||
|
)
|
||||||
|
|
||||||
|
await authManager.logIn(userName, password)
|
||||||
|
|
||||||
|
expect(authModule.parseAndSubmitAuthorizeForm).toHaveBeenCalledWith(
|
||||||
|
mockLoginAuthoriseRequiredResponse,
|
||||||
|
serverUrl
|
||||||
|
)
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should check and return session information if logged in', async (done) => {
|
||||||
|
const authManager = new AuthManager(serverUrl, serverType, authCallback)
|
||||||
|
mockedAxios.get.mockImplementation(() =>
|
||||||
|
Promise.resolve({ data: '<button onClick="logout">' })
|
||||||
|
)
|
||||||
|
|
||||||
|
const response = await authManager.checkSession()
|
||||||
|
expect(response.isLoggedIn).toBeTruthy()
|
||||||
|
expect(mockedAxios.get).toHaveBeenNthCalledWith(1, `/SASLogon/login`, {
|
||||||
|
responseType: 'text',
|
||||||
|
headers: {
|
||||||
|
Accept: '*/*'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should check and return session information if logged in', async (done) => {
|
||||||
|
const authManager = new AuthManager(serverUrl, serverType, authCallback)
|
||||||
|
mockedAxios.get.mockImplementation(() =>
|
||||||
|
Promise.resolve({ data: '<button onClick="logout">' })
|
||||||
|
)
|
||||||
|
|
||||||
|
const response = await authManager.checkSession()
|
||||||
|
expect(response.isLoggedIn).toBeTruthy()
|
||||||
|
expect(mockedAxios.get).toHaveBeenNthCalledWith(1, `/SASLogon/login`, {
|
||||||
|
responseType: 'text',
|
||||||
|
headers: {
|
||||||
|
Accept: '*/*'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
2
src/auth/spec/mockResponses.ts
Normal file
2
src/auth/spec/mockResponses.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export const mockLoginAuthoriseRequiredResponse = `<form id="application_authorization" action="/SASLogon/oauth/authorize" method="POST"><input type="hidden" name="X-Uaa-Csrf" value="2nfuxIn6WaOURWL7tzTXCe"/>`
|
||||||
|
export const mockLoginSuccessResponse = `You have signed in`
|
||||||
Reference in New Issue
Block a user