@@ -4,6 +4,20 @@ import renderWithProvider from '../../../../util/test/renderWithProvider';
44import WhatsHappeningAssetPill from './WhatsHappeningAssetPill' ;
55
66const mockHandleTrade = jest . fn ( ) ;
7+ const mockTrackEvent = jest . fn ( ) ;
8+ const mockCreateEventBuilder = jest . fn ( ( eventName : string ) => ( {
9+ addProperties : jest . fn ( ( ) => ( {
10+ build : jest . fn ( ( ) => ( { category : eventName } ) ) ,
11+ } ) ) ,
12+ build : jest . fn ( ( ) => ( { category : eventName } ) ) ,
13+ } ) ) ;
14+
15+ jest . mock ( '../../../hooks/useAnalytics/useAnalytics' , ( ) => ( {
16+ useAnalytics : ( ) => ( {
17+ trackEvent : mockTrackEvent ,
18+ createEventBuilder : mockCreateEventBuilder ,
19+ } ) ,
20+ } ) ) ;
721
822jest . mock (
923 '../../../Views/WhatsHappeningDetailView/hooks/useTradeNavigation' ,
@@ -40,6 +54,23 @@ const baseAsset = {
4054 hlPerpsMarket : [ 'BTC' ] as string [ ] ,
4155} ;
4256
57+ const baseItem = {
58+ id : 'trend-0' ,
59+ title : 'Test headline' ,
60+ description : 'Test description' ,
61+ date : '2026-01-01T00:00:00.000Z' ,
62+ impact : 'positive' as const ,
63+ relatedAssets : [ baseAsset ] ,
64+ articles : [ ] ,
65+ } ;
66+
67+ const defaultProps = {
68+ asset : baseAsset ,
69+ item : baseItem ,
70+ cardIndex : 0 ,
71+ source : 'homepage' as const ,
72+ } ;
73+
4374describe ( 'WhatsHappeningAssetPill' , ( ) => {
4475 beforeEach ( ( ) => {
4576 jest . clearAllMocks ( ) ;
@@ -53,16 +84,32 @@ describe('WhatsHappeningAssetPill', () => {
5384 } ) ;
5485
5586 it ( 'renders display symbol' , ( ) => {
56- renderWithProvider ( < WhatsHappeningAssetPill asset = { baseAsset } /> ) ;
87+ renderWithProvider ( < WhatsHappeningAssetPill { ... defaultProps } /> ) ;
5788 expect ( screen . getByText ( 'BTC' ) ) . toBeOnTheScreen ( ) ;
5889 } ) ;
5990
6091 it ( 'calls handleTrade when canTrade and pressed' , ( ) => {
61- renderWithProvider ( < WhatsHappeningAssetPill asset = { baseAsset } /> ) ;
92+ renderWithProvider ( < WhatsHappeningAssetPill { ... defaultProps } /> ) ;
6293 fireEvent . press ( screen . getByLabelText ( 'BTC' ) ) ;
6394 expect ( mockHandleTrade ) . toHaveBeenCalledTimes ( 1 ) ;
6495 } ) ;
6596
97+ it ( 'fires WHATS_HAPPENING_INTERACTED with related_asset_pressed when pressed' , ( ) => {
98+ renderWithProvider ( < WhatsHappeningAssetPill { ...defaultProps } /> ) ;
99+ fireEvent . press ( screen . getByLabelText ( 'BTC' ) ) ;
100+ expect ( mockTrackEvent ) . toHaveBeenCalledTimes ( 1 ) ;
101+ const builderCall = mockCreateEventBuilder . mock . results [ 0 ] . value ;
102+ expect ( builderCall . addProperties ) . toHaveBeenCalledWith (
103+ expect . objectContaining ( {
104+ interaction_type : 'related_asset_pressed' ,
105+ view : 'carousel' ,
106+ asset_symbol : 'BTC' ,
107+ perps_market : 'BTC' ,
108+ asset_caip19 : 'eip155:1/slip44:0' ,
109+ } ) ,
110+ ) ;
111+ } ) ;
112+
66113 it ( 'does not wrap in button when canTrade is false' , ( ) => {
67114 const useTradeNavigation = jest . requireMock (
68115 '../../../Views/WhatsHappeningDetailView/hooks/useTradeNavigation' ,
@@ -71,15 +118,15 @@ describe('WhatsHappeningAssetPill', () => {
71118 handleTrade : mockHandleTrade ,
72119 canTrade : false ,
73120 } ) ;
74- renderWithProvider ( < WhatsHappeningAssetPill asset = { baseAsset } /> ) ;
121+ renderWithProvider ( < WhatsHappeningAssetPill { ... defaultProps } /> ) ;
75122 expect ( screen . queryByLabelText ( 'BTC' ) ) . toBeNull ( ) ;
76123 expect ( screen . getByText ( 'BTC' ) ) . toBeOnTheScreen ( ) ;
77124 } ) ;
78125
79126 it ( 'shows positive percent change when perpsPriceEntry has a positive value' , ( ) => {
80127 renderWithProvider (
81128 < WhatsHappeningAssetPill
82- asset = { baseAsset }
129+ { ... defaultProps }
83130 perpsPriceEntry = { { price : 95000 , percentChange24h : 1.23 } }
84131 /> ,
85132 ) ;
@@ -89,22 +136,22 @@ describe('WhatsHappeningAssetPill', () => {
89136 it ( 'shows negative percent change when perpsPriceEntry has a negative value' , ( ) => {
90137 renderWithProvider (
91138 < WhatsHappeningAssetPill
92- asset = { baseAsset }
139+ { ... defaultProps }
93140 perpsPriceEntry = { { price : 95000 , percentChange24h : - 2.5 } }
94141 /> ,
95142 ) ;
96143 expect ( screen . getByText ( '-2.50%' ) ) . toBeOnTheScreen ( ) ;
97144 } ) ;
98145
99146 it ( 'does not render change text when perpsPriceEntry is undefined' , ( ) => {
100- renderWithProvider ( < WhatsHappeningAssetPill asset = { baseAsset } /> ) ;
147+ renderWithProvider ( < WhatsHappeningAssetPill { ... defaultProps } /> ) ;
101148 expect ( screen . queryByText ( / % / ) ) . toBeNull ( ) ;
102149 } ) ;
103150
104151 it ( 'does not render change text when percentChange24h is undefined' , ( ) => {
105152 renderWithProvider (
106153 < WhatsHappeningAssetPill
107- asset = { baseAsset }
154+ { ... defaultProps }
108155 perpsPriceEntry = { { price : undefined , percentChange24h : undefined } }
109156 /> ,
110157 ) ;
0 commit comments