Skip to content

Commit

Permalink
fix handle both undefined and empty string cases in proposal
Browse files Browse the repository at this point in the history
  • Loading branch information
ChaituVR committed Jan 7, 2025
1 parent 98c1f40 commit 6ed7a53
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 18 deletions.
4 changes: 2 additions & 2 deletions src/ingestor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ export default async function ingestor(req) {
body: message.body,
discussion: message.discussion || '',
choices: message.choices,
privacy: message.privacy || '',
privacy: message.privacy,
labels: message.labels || [],
start: message.start,
end: message.end,
Expand All @@ -169,7 +169,7 @@ export default async function ingestor(req) {
name: message.title,
body: message.body,
discussion: message.discussion || '',
privacy: message.privacy || '',
privacy: message.privacy,
choices: message.choices,
labels: message.labels || [],
metadata: {
Expand Down
13 changes: 6 additions & 7 deletions src/writer/proposal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,10 @@ export async function verify(body): Promise<any> {
if (msg.payload.type !== space.voting.type) return Promise.reject('invalid voting type');
}

if (
space.voting?.privacy !== 'any' &&
msg.payload.privacy &&
!(space.voting?.privacy === 'shutter' && msg.payload.privacy === 'shutter')
) {
const spacePrivacy = space.voting?.privacy ?? 'any';
const proposalPrivacy = msg.payload.privacy;

if (proposalPrivacy !== undefined && spacePrivacy !== 'any' && spacePrivacy !== proposalPrivacy) {
return Promise.reject('not allowed to set privacy');
}

Expand Down Expand Up @@ -214,9 +213,9 @@ export async function action(body, ipfs, receipt, id): Promise<void> {
const plugins = JSON.stringify(metadata.plugins || {});
const spaceNetwork = spaceSettings.network;
const proposalSnapshot = parseInt(msg.payload.snapshot || '0');
let privacy = spaceSettings.voting?.privacy || '';
let privacy = spaceSettings.voting?.privacy ?? 'any';
if (privacy === 'any') {
privacy = msg.payload.privacy;
privacy = msg.payload.privacy ?? '';
}

let quorum = spaceSettings.voting?.quorum || 0;
Expand Down
13 changes: 6 additions & 7 deletions src/writer/update-proposal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,10 @@ export async function verify(body): Promise<any> {

if (proposal.author !== body.address) return Promise.reject('Not the author');

if (
space.voting?.privacy !== 'any' &&
msg.payload.privacy &&
!(space.voting.privacy === 'shutter' && msg.payload.privacy === 'shutter')
) {
const spacePrivacy = space.voting?.privacy ?? 'any';
const proposalPrivacy = msg.payload.privacy;

if (proposalPrivacy !== undefined && spacePrivacy !== 'any' && spacePrivacy !== proposalPrivacy) {
return Promise.reject('not allowed to set privacy');
}

Expand All @@ -72,9 +71,9 @@ export async function action(body, ipfs): Promise<void> {
const metadata = msg.payload.metadata || {};
const plugins = JSON.stringify(metadata.plugins || {});
const spaceSettings = await getSpace(msg.space);
let privacy = spaceSettings.voting?.privacy || '';
let privacy = spaceSettings.voting?.privacy ?? 'any';
if (privacy === 'any') {
privacy = msg.payload.privacy;
privacy = msg.payload.privacy ?? '';
}

const proposal = {
Expand Down
11 changes: 9 additions & 2 deletions test/unit/writer/proposal.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -337,10 +337,10 @@ describe('writer/proposal', () => {
});
});

it('rejects a proposal with shutter privacy', () => {
it('accepts a proposal with shutter privacy', () => {
return expect(
writer.verify(updateInputPayload(input, { privacy: 'shutter' }))
).rejects.toMatch('not allowed to set privacy');
).resolves.toBeUndefined();
});

it('accepts a proposal with undefined privacy', () => {
Expand Down Expand Up @@ -402,6 +402,13 @@ describe('writer/proposal', () => {
writer.verify(updateInputPayload(input, { privacy: undefined }))
).resolves.toBeUndefined();
});

it('rejects a proposal with privacy empty string', async () => {
expect.assertions(1);
await expect(writer.verify(updateInputPayload(input, { privacy: '' }))).rejects.toMatch(
'not allowed to set privacy'
);
});
});
});

Expand Down

0 comments on commit 6ed7a53

Please sign in to comment.