passport.test.js 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const { getInstance } = require('../setup-crowi');
  2. describe('PassportService test', () => {
  3. let crowi;
  4. beforeEach(async() => {
  5. crowi = await getInstance();
  6. });
  7. describe('verifySAMLResponseByABLCRule()', () => {
  8. let getConfigSpy;
  9. let extractAttributesFromSAMLResponseSpy;
  10. beforeEach(async() => {
  11. // prepare spy for ConfigManager.getConfig
  12. getConfigSpy = jest.spyOn(crowi.configManager, 'getConfig');
  13. // prepare spy for extractAttributesFromSAMLResponse method
  14. extractAttributesFromSAMLResponseSpy = jest.spyOn(crowi.passportService, 'extractAttributesFromSAMLResponse');
  15. });
  16. /* eslint-disable indent */
  17. let i = 0;
  18. describe.each`
  19. conditionId | departments | positions | ruleStr | expected
  20. ${i++} | ${undefined} | ${undefined} | ${'Department: A'} | ${false}
  21. ${i++} | ${[]} | ${['Leader']} | ${'Position'} | ${true}
  22. ${i++} | ${[]} | ${['Leader']} | ${'Position: Leader'} | ${true}
  23. ${i++} | ${['A']} | ${[]} | ${'Department: A || Department: B && Position: Leader'} | ${true}
  24. ${i++} | ${['B']} | ${['Leader']} | ${'Department: A || Department: B && Position: Leader'} | ${true}
  25. ${i++} | ${['A', 'C']} | ${['Leader']} | ${'Department: A || Department: B && Position: Leader'} | ${true}
  26. ${i++} | ${['B', 'C']} | ${['Leader']} | ${'Department: A || Department: B && Position: Leader'} | ${true}
  27. ${i++} | ${[]} | ${[]} | ${'Department: A || Department: B && Position: Leader'} | ${false}
  28. ${i++} | ${['C']} | ${['Leader']} | ${'Department: A || Department: B && Position: Leader'} | ${false}
  29. ${i++} | ${['A']} | ${['Leader']} | ${'(Department: A || Department: B) && Position: Leader'} | ${true}
  30. ${i++} | ${['B']} | ${['Leader']} | ${'(Department: A || Department: B) && Position: Leader'} | ${true}
  31. ${i++} | ${['C']} | ${['Leader']} | ${'(Department: A || Department: B) && Position: Leader'} | ${false}
  32. ${i++} | ${['A', 'B']} | ${[]} | ${'(Department: A || Department: B) && Position: Leader'} | ${false}
  33. ${i++} | ${['A']} | ${[]} | ${'Department: A NOT Position: Leader'} | ${true}
  34. ${i++} | ${['A']} | ${['Leader']} | ${'Department: A NOT Position: Leader'} | ${false}
  35. ${i++} | ${[]} | ${['Leader']} | ${'Department: A OR (Position NOT Position: User)'} | ${true}
  36. ${i++} | ${[]} | ${['User']} | ${'Department: A OR (Position NOT Position: User)'} | ${false}
  37. `('to be $expected under rule="$ruleStr"', ({
  38. conditionId, departments, positions, ruleStr, expected,
  39. }) => {
  40. test(`when conditionId=${conditionId}`, async() => {
  41. const responseMock = {};
  42. // setup mock implementation
  43. getConfigSpy.mockImplementation((ns, key) => {
  44. if (ns === 'crowi' && key === 'security:passport-saml:ABLCRule') {
  45. return ruleStr;
  46. }
  47. throw new Error('Unexpected behavior.');
  48. });
  49. extractAttributesFromSAMLResponseSpy.mockImplementation((response) => {
  50. if (response !== responseMock) {
  51. throw new Error('Unexpected args.');
  52. }
  53. return {
  54. Department: departments,
  55. Position: positions,
  56. };
  57. });
  58. const result = crowi.passportService.verifySAMLResponseByABLCRule(responseMock);
  59. expect(result).toBe(expected);
  60. });
  61. });
  62. });
  63. });