utils.spec.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import {Fragment} from 'react';
  2. import {render, screen} from 'sentry-test/reactTestingLibrary';
  3. import {
  4. getKnownData,
  5. getKnownStructuredData,
  6. getUnknownData,
  7. } from 'sentry/components/events/contexts/utils';
  8. describe('contexts utils', function () {
  9. describe('getUnknownData', function () {
  10. it('filters out unknown data and transforms into the right way', function () {
  11. const allData = {
  12. id: 1,
  13. email: 'a@a.com',
  14. username: 'a',
  15. count: 1000,
  16. type: 'type',
  17. title: 'title',
  18. };
  19. const knownKeys = ['id', 'email'];
  20. const unknownData = getUnknownData({allData, knownKeys});
  21. expect(unknownData).toEqual([
  22. {key: 'username', value: 'a', subject: 'Username', meta: undefined},
  23. {key: 'count', value: 1000, subject: 'Count', meta: undefined},
  24. ]);
  25. });
  26. });
  27. describe('getKnownData', function () {
  28. it('filters out known data and transforms into the right way', function () {
  29. const data = {
  30. device_app_hash: '2421fae1ac9237a8131e74883e52b0f7034a143f',
  31. build_type: 0,
  32. app_identifier: 'io.sentry.sample.iOS-Swift',
  33. app_name: '',
  34. app_version: '7.1.3',
  35. app_build: '1',
  36. app_id: '3145EA1A-0EAE-3F8C-969A-13A01394D3EA',
  37. type: 'app',
  38. };
  39. const knownDataTypes = ['device_app_hash', 'build_type', 'app_name'];
  40. const knownData = getKnownData({
  41. data,
  42. knownDataTypes,
  43. onGetKnownDataDetails: v => {
  44. if (v.type === 'device_app_hash') {
  45. return {
  46. subject: 'Device App Hash',
  47. value: v.data.device_app_hash,
  48. };
  49. }
  50. if (v.type === 'app_name') {
  51. return {
  52. subject: 'App Name',
  53. value: v.data.app_name,
  54. };
  55. }
  56. if (v.type === 'build_type') {
  57. return {
  58. subject: 'Build Type',
  59. value: v.data.build_type,
  60. };
  61. }
  62. return undefined;
  63. },
  64. });
  65. expect(knownData).toEqual([
  66. {
  67. key: 'device_app_hash',
  68. value: expect.anything(),
  69. subject: 'Device App Hash',
  70. meta: undefined,
  71. },
  72. {
  73. key: 'build_type',
  74. value: expect.anything(),
  75. subject: 'Build Type',
  76. meta: undefined,
  77. },
  78. ]);
  79. });
  80. it('does not format the value when displaying raw', function () {
  81. const data = {device_app_hash: 'abc'};
  82. const knownDataTypes = ['device_app_hash'];
  83. const knownData = getKnownData({
  84. data,
  85. knownDataTypes,
  86. onGetKnownDataDetails: v => {
  87. if (v.type === 'device_app_hash') {
  88. return {
  89. subject: 'Device App Hash',
  90. value: v.data.device_app_hash,
  91. };
  92. }
  93. return undefined;
  94. },
  95. });
  96. expect(knownData).toEqual([
  97. {
  98. key: 'device_app_hash',
  99. value: 'abc',
  100. subject: 'Device App Hash',
  101. meta: undefined,
  102. },
  103. ]);
  104. });
  105. });
  106. describe('getKnownStructuredData', function () {
  107. it('formats the output from getKnownData into StructuredEventData', function () {
  108. const data = {device_app_hash: 'abc'};
  109. const knownDataTypes = ['device_app_hash'];
  110. const knownData = getKnownData({
  111. data,
  112. knownDataTypes,
  113. onGetKnownDataDetails: v => {
  114. if (v.type === 'device_app_hash') {
  115. return {
  116. subject: 'Device App Hash',
  117. value: v.data.device_app_hash,
  118. };
  119. }
  120. return undefined;
  121. },
  122. });
  123. const errMeta = {
  124. device_app_hash: {
  125. '': {
  126. err: [
  127. [
  128. 'invalid_data',
  129. {
  130. reason: 'bad device',
  131. },
  132. ],
  133. ],
  134. },
  135. },
  136. };
  137. const knownStructuredData = getKnownStructuredData(knownData, errMeta);
  138. expect(knownData[0].key).toEqual(knownStructuredData[0].key);
  139. expect(knownData[0].subject).toEqual(knownStructuredData[0].subject);
  140. render(<Fragment>{knownStructuredData[0].value as React.ReactNode}</Fragment>);
  141. expect(screen.getByText(`${knownData[0].value}`)).toBeInTheDocument();
  142. expect(screen.getByTestId('annotated-text-error-icon')).toBeInTheDocument();
  143. });
  144. });
  145. });