-
Notifications
You must be signed in to change notification settings - Fork 300
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Kate / DTRA-436 / Consistency for Responsive for all trade types (exc…
…ept Multipliers) (#10826) * refactor: make cards consistance * refactor: remove some multipliers limitations and commited code * refactor: add unit tests * refactor: unit tests * refactor: apply suggestions
- Loading branch information
1 parent
288b875
commit e63a2cd
Showing
4 changed files
with
203 additions
and
152 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
194 changes: 194 additions & 0 deletions
194
...trader/src/App/Components/Elements/PositionsDrawer/__tests__/position-modal-card.spec.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
import React from 'react'; | ||
import { render, screen } from '@testing-library/react'; | ||
import { mockStore } from '@deriv/stores'; | ||
import { TCoreStores } from '@deriv/stores/types'; | ||
import { VANILLALONG, TURBOS } from '@deriv/shared'; | ||
import { ActiveSymbols } from '@deriv/api-types'; | ||
import PositionsModalCard from '../positions-modal-card'; | ||
import TraderProviders from '../../../../../trader-providers'; | ||
|
||
const default_mock_props = { | ||
className: 'test_className', | ||
contract_info: { | ||
contract_type: VANILLALONG.CALL, | ||
underlying: '', | ||
contract_id: 123386875, | ||
currency: 'USD', | ||
buy_price: 2671, | ||
bid_price: 2517, | ||
entry_spot: 2666, | ||
barrier: '2650', | ||
is_sold: 0, | ||
date_start: 123532989, | ||
date_expiry: 626512765, | ||
tick_count: 15, | ||
}, | ||
contract_update: {}, | ||
currency: 'USD', | ||
current_tick: 6, | ||
id: 123386875, | ||
is_loading: false, | ||
is_sell_requested: false, | ||
is_unsupported: true, | ||
onClickSell: jest.fn(), | ||
profit_loss: 35.6786, | ||
onClickCancel: jest.fn(), | ||
togglePositions: jest.fn(), | ||
toggleUnsupportedContractModal: jest.fn(), | ||
} as unknown as React.ComponentProps<typeof PositionsModalCard>; | ||
|
||
const default_mock_store = { | ||
modules: { | ||
trade: { | ||
active_symbols: [{ symbol: 'R_10' }] as ActiveSymbols, | ||
}, | ||
}, | ||
ui: { | ||
addToast: jest.fn(), | ||
current_focus: '', | ||
is_mobile: true, | ||
removeToast: jest.fn(), | ||
setCurrentFocus: jest.fn(), | ||
should_show_cancellation_warning: false, | ||
toggleCancellationWarning: jest.fn(), | ||
}, | ||
common: { | ||
server_time: 123254362145 as unknown as moment.Moment, | ||
}, | ||
contract_trade: { | ||
getContractById: jest.fn(), | ||
}, | ||
}; | ||
const PositionsCardLoader = 'PositionsCardLoader'; | ||
const SymbolDisplayName = 'SymbolDisplayName'; | ||
|
||
jest.mock('App/Components/Elements/ContentLoader', () => ({ | ||
...jest.requireActual('App/Components/Elements/ContentLoader'), | ||
PositionsCardLoader: jest.fn(() => <div>{PositionsCardLoader}</div>), | ||
})); | ||
jest.mock('@deriv/shared', () => ({ | ||
...jest.requireActual('@deriv/shared'), | ||
getEndTime: jest.fn(() => false), | ||
getTotalProfit: jest.fn(() => 35.6786), | ||
getSymbolDisplayName: jest.fn(() => SymbolDisplayName), | ||
})); | ||
jest.mock('react-router-dom', () => ({ | ||
...jest.requireActual('react-router-dom'), | ||
NavLink: jest.fn(({ children }) => <div>{children}</div>), | ||
})); | ||
jest.mock('App/Components/Routes', () => ({ | ||
...jest.requireActual('App/Components/Routes'), | ||
BinaryLink: jest.fn(({ children }) => <div>{children}</div>), | ||
})); | ||
jest.mock('@deriv/components', () => ({ | ||
...jest.requireActual('@deriv/components'), | ||
CurrencyBadge: jest.fn(() => <div>CurrencyBadge</div>), | ||
ProgressSliderMobile: jest.fn(() => <div>ProgressSliderMobile</div>), | ||
})); | ||
|
||
describe('<PositionsModalCard />', () => { | ||
const mockPositionsModalCard = ( | ||
mocked_store: TCoreStores, | ||
mocked_params: React.ComponentProps<typeof PositionsModalCard> | ||
) => { | ||
return ( | ||
<TraderProviders store={mocked_store}> | ||
<PositionsModalCard {...mocked_params} /> | ||
</TraderProviders> | ||
); | ||
}; | ||
|
||
it('should render loader if underlying in contract_info is falsy and contract is unsupported', () => { | ||
render(mockPositionsModalCard(mockStore(default_mock_store), default_mock_props)); | ||
|
||
expect(screen.getByText(PositionsCardLoader)).toBeInTheDocument(); | ||
}); | ||
it('should render loader if underlying in contract_info is falsy and contract is supported', () => { | ||
default_mock_props.is_unsupported = false; | ||
render(mockPositionsModalCard(mockStore(default_mock_store), default_mock_props)); | ||
|
||
expect(screen.getByText(PositionsCardLoader)).toBeInTheDocument(); | ||
}); | ||
it('should render specific contract card for Vanillas', () => { | ||
default_mock_props.contract_info.underlying = 'test_underlying'; | ||
render(mockPositionsModalCard(mockStore(default_mock_store), default_mock_props)); | ||
|
||
expect(screen.queryByText(PositionsCardLoader)).not.toBeInTheDocument(); | ||
expect(screen.getByText(SymbolDisplayName)).toBeInTheDocument(); | ||
expect(screen.getByText('CurrencyBadge')).toBeInTheDocument(); | ||
expect(screen.getByText(/Buy price:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,671.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Contract value:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,517.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Entry spot:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,666.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Strike:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,650.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText('ProgressSliderMobile')).toBeInTheDocument(); | ||
expect(screen.getByText(/Total profit\/loss:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/35.68/i)).toBeInTheDocument(); | ||
}); | ||
it('should render specific contract card for Turbos', () => { | ||
default_mock_props.contract_info.contract_type = TURBOS.LONG; | ||
render(mockPositionsModalCard(mockStore(default_mock_store), default_mock_props)); | ||
|
||
expect(screen.queryByText(PositionsCardLoader)).not.toBeInTheDocument(); | ||
expect(screen.getByText(SymbolDisplayName)).toBeInTheDocument(); | ||
expect(screen.getByText('Long')).toBeInTheDocument(); | ||
expect(screen.getByText(/USD/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Buy price:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,671.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Contract value:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,517.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Entry spot:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/0.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Take profit:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/-/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Barrier:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,650/i)).toBeInTheDocument(); | ||
}); | ||
it('should render contract card for Rise/Fall', () => { | ||
default_mock_props.contract_info.contract_type = 'rise_fall'; | ||
render(mockPositionsModalCard(mockStore(default_mock_store), default_mock_props)); | ||
|
||
expect(screen.queryByText(PositionsCardLoader)).not.toBeInTheDocument(); | ||
expect(screen.getByText(SymbolDisplayName)).toBeInTheDocument(); | ||
expect(screen.getByText(/USD/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Potential profit\/loss:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Indicative price:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,517.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Buy price:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,671.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Payout limit:/i)).toBeInTheDocument(); | ||
}); | ||
it('should render the same contract card for Touch/No Touch as for Rise/Fall', () => { | ||
default_mock_props.contract_info.contract_type = 'touch'; | ||
render(mockPositionsModalCard(mockStore(default_mock_store), default_mock_props)); | ||
|
||
expect(screen.queryByText(PositionsCardLoader)).not.toBeInTheDocument(); | ||
expect(screen.getByText(SymbolDisplayName)).toBeInTheDocument(); | ||
expect(screen.getByText(/USD/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Potential profit\/loss:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Indicative price:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,517.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Buy price:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,671.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Payout limit:/i)).toBeInTheDocument(); | ||
}); | ||
it('should render the contract card for Multipliers', () => { | ||
default_mock_props.contract_info.contract_type = 'multiplier'; | ||
render(mockPositionsModalCard(mockStore(default_mock_store), default_mock_props)); | ||
|
||
expect(screen.queryByText(PositionsCardLoader)).not.toBeInTheDocument(); | ||
expect(screen.getByText(SymbolDisplayName)).toBeInTheDocument(); | ||
expect(screen.getByText(/USD/i)).toBeInTheDocument(); | ||
expect(screen.getByText('Stake:')).toBeInTheDocument(); | ||
expect(screen.getByText(/Current stake:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/2,517.00/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Deal cancel. fee:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Buy price:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Take profit:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Stop loss:/i)).toBeInTheDocument(); | ||
expect(screen.getByText(/Total profit\/loss:/i)).toBeInTheDocument(); | ||
}); | ||
}); |
Oops, something went wrong.
e63a2cd
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Successfully deployed to the following URLs:
deriv-app – ./
binary.sx
deriv-app.binary.sx
deriv-app.vercel.app
deriv-app-git-master.binary.sx