feat(governance): lp vote now reflected on proposal cards (#3256)

This commit is contained in:
Sam Keen 2023-03-24 14:56:56 +00:00 committed by GitHub
parent 868f8e21dc
commit 8214858685
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 131 additions and 9 deletions

View File

@ -341,7 +341,7 @@ context(
'Currently expected to pass' 'Currently expected to pass'
); );
getProposalInformationFromTable('Expected to pass') getProposalInformationFromTable('Expected to pass')
.contains('👍 by Token vote') .contains('👍 by token vote')
.should('be.visible'); .should('be.visible');
}); });

View File

@ -221,8 +221,9 @@
"votePending": "Casting vote", "votePending": "Casting vote",
"voteError": "Something went wrong, and your vote was not seen by the network", "voteError": "Something went wrong, and your vote was not seen by the network",
"back": "back", "back": "back",
"byTokenVote": "by Token vote", "byTokenVote": "by token vote",
"byLiquidityVote": "by Liquidity vote", "byLiquidityVote": "by liquidity vote",
"byLPVote": "by LP vote",
"youDidNotVote": "Voting has ended. You did not vote", "youDidNotVote": "Voting has ended. You did not vote",
"voteState_Yes": "For", "voteState_Yes": "For",
"voteState_No": "Against", "voteState_No": "Against",

View File

@ -86,7 +86,7 @@ describe('Proposal Votes Table', () => {
it('displays if an update market proposal will pass by token vote', () => { it('displays if an update market proposal will pass by token vote', () => {
renderComponent(updateMarketProposal, updateMarketProposalType); renderComponent(updateMarketProposal, updateMarketProposalType);
expect(screen.getByText('👍 by Token vote')).toBeInTheDocument(); expect(screen.getByText('👍 by token vote')).toBeInTheDocument();
}); });
it('displays if an update market proposal will pass by LP vote', () => { it('displays if an update market proposal will pass by LP vote', () => {
@ -110,6 +110,6 @@ describe('Proposal Votes Table', () => {
}), }),
updateMarketProposalType updateMarketProposalType
); );
expect(screen.getByText('👍 by Liquidity vote')).toBeInTheDocument(); expect(screen.getByText('👍 by liquidity vote')).toBeInTheDocument();
}); });
}); });

View File

@ -136,6 +136,82 @@ describe('Proposals list item details', () => {
); );
}); });
it('Renders proposal state: Update market proposal - set to pass by LP vote', () => {
renderComponent(
generateProposal({
state: ProposalState.STATE_OPEN,
terms: {
change: {
__typename: 'UpdateMarket',
},
},
votes: {
yes: {
...generateYesVotes(0),
totalEquityLikeShareWeight: '1000',
},
no: {
...generateNoVotes(0),
totalEquityLikeShareWeight: '0',
},
},
})
);
expect(screen.getByTestId('vote-status')).toHaveTextContent(
'Set to pass by LP vote'
);
});
it('Renders proposal state: Update market proposal - set to pass by token vote', () => {
renderComponent(
generateProposal({
state: ProposalState.STATE_OPEN,
terms: {
change: {
__typename: 'UpdateMarket',
},
},
votes: {
yes: {
...generateYesVotes(1000, 1000),
totalEquityLikeShareWeight: '0',
},
no: {
...generateNoVotes(0),
totalEquityLikeShareWeight: '0',
},
},
})
);
expect(screen.getByTestId('vote-status')).toHaveTextContent(
'Set to pass by token vote'
);
});
it('Renders proposal state: Update market proposal - set to fail', () => {
renderComponent(
generateProposal({
state: ProposalState.STATE_OPEN,
terms: {
change: {
__typename: 'UpdateMarket',
},
},
votes: {
yes: {
...generateYesVotes(0),
totalEquityLikeShareWeight: '0',
},
no: {
...generateNoVotes(0),
totalEquityLikeShareWeight: '0',
},
},
})
);
expect(screen.getByTestId('vote-status')).toHaveTextContent('Set to fail');
});
it('Renders proposal state: Open - 5 minutes left to vote', () => { it('Renders proposal state: Open - 5 minutes left to vote', () => {
renderComponent( renderComponent(
generateProposal({ generateProposal({

View File

@ -41,12 +41,22 @@ export const ProposalsListItemDetails = ({
proposal: ProposalFieldsFragment | ProposalQuery['proposal']; proposal: ProposalFieldsFragment | ProposalQuery['proposal'];
}) => { }) => {
const state = proposal?.state; const state = proposal?.state;
const { willPassByTokenVote, majorityMet, participationMet } = const {
useVoteInformation({ willPassByTokenVote,
willPassByLPVote,
majorityMet,
participationMet,
} = useVoteInformation({
proposal, proposal,
}); });
const { t } = useTranslation(); const { t } = useTranslation();
const { voteState } = useUserVote(proposal?.id); const { voteState } = useUserVote(proposal?.id);
const isUpdateMarket = proposal?.terms.change.__typename === 'UpdateMarket';
const updateMarketWillPass = willPassByTokenVote || willPassByLPVote;
const updateMarketVotePassMethod = willPassByTokenVote
? t('byTokenVote')
: t('byLPVote');
let proposalStatus: ReactNode; let proposalStatus: ReactNode;
let voteDetails: ReactNode; let voteDetails: ReactNode;
let voteStatus: ReactNode; let voteStatus: ReactNode;
@ -128,6 +138,19 @@ export const ProposalsListItemDetails = ({
</> </>
); );
voteStatus = voteStatus =
(isUpdateMarket &&
(updateMarketWillPass ? (
<>
{t('Set to')}{' '}
<StatusPass>
{t('pass')} {updateMarketVotePassMethod}
</StatusPass>
</>
) : (
<>
{t('Set to')} <StatusFail>{t('fail')}</StatusFail>
</>
))) ||
(!participationMet && <ParticipationNotReached />) || (!participationMet && <ParticipationNotReached />) ||
(!majorityMet && <MajorityNotReached />) || (!majorityMet && <MajorityNotReached />) ||
(willPassByTokenVote ? ( (willPassByTokenVote ? (

View File

@ -32,6 +32,7 @@ export const VoteDetails = ({
totalTokensPercentage, totalTokensPercentage,
participationMet, participationMet,
totalTokensVoted, totalTokensVoted,
totalLPTokensPercentage,
noPercentage, noPercentage,
noLPPercentage, noLPPercentage,
yesPercentage, yesPercentage,
@ -41,6 +42,8 @@ export const VoteDetails = ({
requiredMajorityPercentage, requiredMajorityPercentage,
requiredMajorityLPPercentage, requiredMajorityLPPercentage,
requiredParticipation, requiredParticipation,
requiredParticipationLP,
participationLPMet,
} = useVoteInformation({ proposal }); } = useVoteInformation({ proposal });
const { t } = useTranslation(); const { t } = useTranslation();
@ -101,6 +104,25 @@ export const VoteDetails = ({
</tr> </tr>
</tbody> </tbody>
</table> </table>
<p className="mb-6">
{t('participation')}
{': '}
{participationLPMet ? (
<span className="text-vega-green mx-4">{t('met')}</span>
) : (
<span className="text-danger mx-4">{t('notMet')}</span>
)}{' '}
{formatNumber(totalLPTokensPercentage, defaultDecimals)}%
<span className="ml-4">
{requiredParticipationLP && (
<>
({formatNumber(requiredParticipationLP, defaultDecimals)}%{' '}
{t('governanceRequired')})
</>
)}
</span>
</p>
</section> </section>
)} )}
<section data-testid="votes-table"> <section data-testid="votes-table">