share-link.test.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. const { getInstance } = require('../setup-crowi');
  2. describe('ShareLink', () => {
  3. // eslint-disable-next-line no-unused-vars
  4. let crowi;
  5. let ShareLink;
  6. let Page;
  7. beforeAll(async() => {
  8. crowi = await getInstance();
  9. ShareLink = crowi.model('ShareLink');
  10. Page = require('~/server/routes/page')(crowi);
  11. });
  12. describe('accessShareLink', () => {
  13. const req = {
  14. path: '/share/:id',
  15. params: {
  16. linkId: 'someLinkId',
  17. },
  18. query: {
  19. revision: 'someRevision',
  20. },
  21. };
  22. const res = {
  23. render: jest.fn((page, renderVars = null) => { return { page, renderVars } }),
  24. };
  25. const findOneResult = {
  26. populate: null,
  27. };
  28. const relatedPage = {
  29. path: '/somePath',
  30. populateDataToShowRevision: () => {
  31. return {
  32. revision: {
  33. author: {
  34. toObject: jest.fn(() => { return {} }),
  35. },
  36. },
  37. creator: {
  38. toObject: jest.fn(() => { return {} }),
  39. },
  40. };
  41. },
  42. initLatestRevisionField: (revisionId) => {
  43. return revisionId;
  44. },
  45. };
  46. test('share link is not found', async() => {
  47. findOneResult.populate = jest.fn(() => { return null });
  48. jest.spyOn(ShareLink, 'findOne').mockImplementation(() => {
  49. return findOneResult;
  50. });
  51. const response = await Page.showSharedPage(req, res);
  52. expect(findOneResult.populate).toHaveBeenCalled();
  53. expect(res.render).toHaveBeenCalled();
  54. expect(response.page).toEqual('layout-growi/not_found_shared_page');
  55. expect(response.renderVars).toEqual(null);
  56. });
  57. test('share link is found, but it does not have Page', async() => {
  58. findOneResult.populate = jest.fn(() => { return { _id: 'somePageId' } });
  59. jest.spyOn(ShareLink, 'findOne').mockImplementation(() => {
  60. return findOneResult;
  61. });
  62. const response = await Page.showSharedPage(req, res);
  63. expect(findOneResult.populate).toHaveBeenCalled();
  64. expect(res.render).toHaveBeenCalled();
  65. expect(response.page).toEqual('layout-growi/not_found_shared_page');
  66. expect(response.renderVars).toEqual(null);
  67. });
  68. test('share link is found, but it is expired', async() => {
  69. findOneResult.populate = jest.fn(() => { return { _id: 'somePageId', relatedPage, isExpired: () => { return true } } });
  70. jest.spyOn(ShareLink, 'findOne').mockImplementation(() => {
  71. return findOneResult;
  72. });
  73. const response = await Page.showSharedPage(req, res);
  74. expect(findOneResult.populate).toHaveBeenCalled();
  75. expect(res.render).toHaveBeenCalled();
  76. expect(response.page).toEqual('layout-growi/expired_shared_page');
  77. expect(response.renderVars).not.toEqual(null);
  78. });
  79. test('share link is found, and it has the page you can see', async() => {
  80. findOneResult.populate = jest.fn(() => { return { _id: 'somePageId', relatedPage, isExpired: () => { return false } } });
  81. jest.spyOn(ShareLink, 'findOne').mockImplementation(() => {
  82. return findOneResult;
  83. });
  84. const response = await Page.showSharedPage(req, res);
  85. expect(findOneResult.populate).toHaveBeenCalled();
  86. expect(res.render).toHaveBeenCalled();
  87. expect(response.page).toEqual('layout-growi/shared_page');
  88. expect(response.renderVars).not.toEqual(null);
  89. });
  90. });
  91. });