suggestProjectCTA.spec.jsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import {openModal} from 'app/actionCreators/modal';
  3. import SuggestProjectCTA from 'app/components/suggestProjectCTA';
  4. import ProjectsStore from 'app/stores/projectsStore';
  5. jest.mock('app/actionCreators/modal');
  6. function generateWrapperAndSetMocks(inputProps, mobileEventResp, promptResp) {
  7. const projects = inputProps?.projects ?? [TestStubs.Project({platform: 'javascript'})];
  8. jest.spyOn(ProjectsStore, 'getState').mockImplementation(() => ({
  9. projects,
  10. loading: false,
  11. }));
  12. const organization = TestStubs.Organization();
  13. MockApiClient.addMockResponse({
  14. url: `/prompts-activity/`,
  15. body: promptResp || {},
  16. });
  17. MockApiClient.addMockResponse({
  18. url: `/organizations/${organization.slug}/has-mobile-app-events/`,
  19. body: mobileEventResp,
  20. });
  21. const props = {
  22. organization,
  23. event: TestStubs.Event({
  24. entries: [{type: 'request', data: {headers: [['User-Agent', 'okhttp/123']]}}],
  25. }),
  26. ...inputProps,
  27. };
  28. return mountWithTheme(<SuggestProjectCTA {...props} />);
  29. }
  30. describe('SuggestProjectCTA', function () {
  31. it('user agent match and and open modal', async () => {
  32. const wrapper = generateWrapperAndSetMocks();
  33. await tick();
  34. wrapper.update();
  35. expect(wrapper.find('Alert')).toHaveLength(1);
  36. wrapper.find('a').simulate('click');
  37. expect(openModal).toHaveBeenCalled();
  38. });
  39. it('mobile event match', async () => {
  40. const wrapper = generateWrapperAndSetMocks(
  41. {
  42. event: TestStubs.Event({
  43. entries: [{type: 'request', data: {headers: [['User-Agent', 'sentry/123']]}}],
  44. }),
  45. },
  46. {browserName: 'okhttp'}
  47. );
  48. await tick();
  49. wrapper.update();
  50. expect(wrapper.find('Alert')).toHaveLength(1);
  51. });
  52. it('user agent does not match', async () => {
  53. const wrapper = generateWrapperAndSetMocks({
  54. event: TestStubs.Event({
  55. entries: [{type: 'request', data: {headers: [['User-Agent', 'sentry/123']]}}],
  56. }),
  57. });
  58. await tick();
  59. wrapper.update();
  60. expect(wrapper.find('Alert')).toHaveLength(0);
  61. });
  62. it('has mobile project', async () => {
  63. const projects = [TestStubs.Project({platform: 'android'})];
  64. const wrapper = generateWrapperAndSetMocks({
  65. projects,
  66. });
  67. await tick();
  68. wrapper.update();
  69. expect(wrapper.find('Alert')).toHaveLength(0);
  70. });
  71. it('prompt is dismissed', async () => {
  72. const wrapper = generateWrapperAndSetMocks(undefined, undefined, {
  73. data: {dismissed_ts: 1234},
  74. });
  75. await tick();
  76. wrapper.update();
  77. expect(wrapper.find('Alert')).toHaveLength(0);
  78. });
  79. });