Add draft, publish, and update tests for proposals.

This commit is contained in:
Will O'Beirne 2018-11-29 20:55:14 -05:00
parent e40d046dd4
commit c05bd6ab43
No known key found for this signature in database
GPG Key ID: 44C190DB5DEAF9F6
4 changed files with 192 additions and 106 deletions

View File

@ -68,7 +68,18 @@ class BaseUserConfig(BaseTestConfig):
class BaseProposalCreatorConfig(BaseUserConfig):
def setUp(self):
super().setUp()
self.proposal = Proposal.create(status="DRAFT")
self.proposal = Proposal.create(
status="DRAFT",
title=test_proposal["title"],
content=test_proposal["content"],
brief=test_proposal["brief"],
category=test_proposal["category"],
target=test_proposal["target"],
payout_address=test_proposal["payoutAddress"],
trustees=test_proposal["trustees"][0],
deadline_duration=test_proposal["deadlineDuration"],
vote_duration=test_proposal["voteDuration"]
)
self.proposal.team.append(self.user)
db.session.add(self.proposal)

View File

@ -2,127 +2,90 @@ import json
from mock import patch
from grant.proposal.models import Proposal
from grant.user.models import SocialMedia, Avatar
from ..config import BaseUserConfig
from ..config import BaseProposalCreatorConfig
from ..test_data import test_proposal, test_user
class TestAPI(BaseUserConfig):
class TestAPI(BaseProposalCreatorConfig):
def test_create_new_draft(self):
resp = self.app.post(
"/api/v1/proposals/drafts",
data=json.dumps({}),
headers=self.headers,
content_type='application/json'
)
self.assertEqual(resp.status_code, 201)
self.assertStatus(resp, 201)
proposal_db = Proposal.query.filter_by(id=resp.json['proposalId'])
self.assertIsNotNone(proposal_db)
@patch('grant.web3.proposal.validate_contribution_tx', return_value=True)
def test_create_proposal_contribution(self, mock_validate_contribution_tx):
proposal_res = self.app.post(
"/api/v1/proposals/drafts",
data=json.dumps(test_proposal),
headers=self.headers,
content_type='application/json'
def test_no_auth_create_new_draft(self):
resp = self.app.post(
"/api/v1/proposals/drafts"
)
proposal_json = proposal_res.json
proposal_id = proposal_json["proposalId"]
self.assert401(resp)
contribution = {
"txId": "0x12345",
"fromAddress": "0x23456",
"amount": "1.2345"
}
def test_update_proposal_draft(self):
new_title = "Updated!"
new_proposal = test_proposal.copy()
new_proposal["title"] = new_title
contribution_res = self.app.post(
"/api/v1/proposals/{}/contributions".format(proposal_id),
data=json.dumps(contribution),
headers=self.headers,
content_type='application/json'
)
res = contribution_res.json
exp = contribution
def eq(k):
self.assertEqual(exp[k], res[k])
eq("txId")
eq("fromAddress")
eq("amount")
self.assertEqual(proposal_id, res["proposalId"])
@patch('grant.web3.proposal.validate_contribution_tx', return_value=True)
def test_get_proposal_contribution(self, mock_validate_contribution_tx):
proposal_res = self.app.post(
"/api/v1/proposals/drafts",
data=json.dumps(test_proposal),
headers=self.headers,
content_type='application/json'
)
proposal_json = proposal_res.json
proposal_id = proposal_json["proposalId"]
contribution = {
"txId": "0x12345",
"fromAddress": "0x23456",
"amount": "1.2345"
}
self.app.post(
"/api/v1/proposals/{}/contributions".format(proposal_id),
data=json.dumps(contribution),
resp = self.app.put(
"/api/v1/proposals/{}".format(self.proposal.id),
data=json.dumps(new_proposal),
headers=self.headers,
content_type='application/json'
)
contribution_res = self.app.get(
"/api/v1/proposals/{0}/contributions/{1}".format(proposal_id, contribution["txId"])
self.assert200(resp)
self.assertEqual(resp.json["title"], new_title)
self.assertEqual(self.proposal.title, new_title)
def test_no_auth_update_proposal_draft(self):
new_title = "Updated!"
new_proposal = test_proposal.copy()
new_proposal["title"] = new_title
resp = self.app.put(
"/api/v1/proposals/{}".format(self.proposal.id),
data=json.dumps(new_proposal),
content_type='application/json'
)
res = contribution_res.json
exp = contribution
self.assert401(resp)
def eq(k):
self.assertEqual(exp[k], res[k])
eq("txId")
eq("fromAddress")
eq("amount")
self.assertEqual(proposal_id, res["proposalId"])
def test_invalid_proposal_update_proposal_draft(self):
new_title = "Updated!"
new_proposal = test_proposal.copy()
new_proposal["title"] = new_title
@patch('grant.web3.proposal.validate_contribution_tx', return_value=True)
def test_get_proposal_contributions(self, mock_validate_contribution_tx):
proposal_res = self.app.post(
"/api/v1/proposals/drafts",
data=json.dumps(test_proposal),
resp = self.app.put(
"/api/v1/proposals/12345",
data=json.dumps(new_proposal),
headers=self.headers,
content_type='application/json'
)
proposal_json = proposal_res.json
proposal_id = proposal_json["proposalId"]
self.assert404(resp)
contribution = {
"txId": "0x12345",
"fromAddress": "0x23456",
"amount": "1.2345"
}
self.app.post(
"/api/v1/proposals/{}/contributions".format(proposal_id),
data=json.dumps(contribution),
def test_publish_proposal_draft(self):
resp = self.app.put(
"/api/v1/proposals/{}/publish".format(self.proposal.id),
data=json.dumps({ "contractAddress": "0x0" }),
headers=self.headers,
content_type='application/json'
)
self.assert200(resp)
contributions_res = self.app.get(
"/api/v1/proposals/{0}/contributions".format(proposal_id)
def test_no_auth_publish_proposal_draft(self):
resp = self.app.put(
"/api/v1/proposals/{}/publish".format(self.proposal.id),
data=json.dumps({ "contractAddress": "0x0" }),
content_type='application/json'
)
res = contributions_res.json[0]
exp = contribution
self.assert401(resp)
def eq(k):
self.assertEqual(exp[k], res[k])
eq("txId")
eq("fromAddress")
eq("amount")
self.assertEqual(proposal_id, res["proposalId"])
def test_invalid_proposal_publish_proposal_draft(self):
resp = self.app.put(
"/api/v1/proposals/12345/publish",
data=json.dumps({ "contractAddress": "0x0" }),
headers=self.headers,
content_type='application/json'
)
self.assert404(resp)

View File

@ -0,0 +1,116 @@
import json
from mock import patch
from grant.proposal.models import Proposal
from grant.user.models import SocialMedia, Avatar
from ..config import BaseUserConfig
from ..test_data import test_proposal, test_user
class TestAPI(BaseUserConfig):
@patch('grant.web3.proposal.validate_contribution_tx', return_value=True)
def test_create_proposal_contribution(self, mock_validate_contribution_tx):
proposal_res = self.app.post(
"/api/v1/proposals/drafts",
data=json.dumps(test_proposal),
headers=self.headers,
content_type='application/json'
)
proposal_json = proposal_res.json
proposal_id = proposal_json["proposalId"]
contribution = {
"txId": "0x12345",
"fromAddress": "0x23456",
"amount": "1.2345"
}
contribution_res = self.app.post(
"/api/v1/proposals/{}/contributions".format(proposal_id),
data=json.dumps(contribution),
headers=self.headers,
content_type='application/json'
)
res = contribution_res.json
exp = contribution
def eq(k):
self.assertEqual(exp[k], res[k])
eq("txId")
eq("fromAddress")
eq("amount")
self.assertEqual(proposal_id, res["proposalId"])
@patch('grant.web3.proposal.validate_contribution_tx', return_value=True)
def test_get_proposal_contribution(self, mock_validate_contribution_tx):
proposal_res = self.app.post(
"/api/v1/proposals/drafts",
data=json.dumps(test_proposal),
headers=self.headers,
content_type='application/json'
)
proposal_json = proposal_res.json
proposal_id = proposal_json["proposalId"]
contribution = {
"txId": "0x12345",
"fromAddress": "0x23456",
"amount": "1.2345"
}
self.app.post(
"/api/v1/proposals/{}/contributions".format(proposal_id),
data=json.dumps(contribution),
headers=self.headers,
content_type='application/json'
)
contribution_res = self.app.get(
"/api/v1/proposals/{0}/contributions/{1}".format(proposal_id, contribution["txId"])
)
res = contribution_res.json
exp = contribution
def eq(k):
self.assertEqual(exp[k], res[k])
eq("txId")
eq("fromAddress")
eq("amount")
self.assertEqual(proposal_id, res["proposalId"])
@patch('grant.web3.proposal.validate_contribution_tx', return_value=True)
def test_get_proposal_contributions(self, mock_validate_contribution_tx):
proposal_res = self.app.post(
"/api/v1/proposals/drafts",
data=json.dumps(test_proposal),
headers=self.headers,
content_type='application/json'
)
proposal_json = proposal_res.json
proposal_id = proposal_json["proposalId"]
contribution = {
"txId": "0x12345",
"fromAddress": "0x23456",
"amount": "1.2345"
}
self.app.post(
"/api/v1/proposals/{}/contributions".format(proposal_id),
data=json.dumps(contribution),
headers=self.headers,
content_type='application/json'
)
contributions_res = self.app.get(
"/api/v1/proposals/{0}/contributions".format(proposal_id)
)
res = contributions_res.json[0]
exp = contribution
def eq(k):
self.assertEqual(exp[k], res[k])
eq("txId")
eq("fromAddress")
eq("amount")
self.assertEqual(proposal_id, res["proposalId"])

View File

@ -75,8 +75,8 @@ test_other_user = {
milestones = [
{
"title": "All the money straightaway",
"description": "cool stuff with it",
"date": "June 2019",
"content": "cool stuff with it",
"dateEstimated": "Fri, 30 Nov 2018 01:42:23 GMT",
"payoutPercent": "100",
"immediatePayout": False
}
@ -87,20 +87,16 @@ test_proposal = {
"crowdFundContractAddress": "0x20000",
"content": "## My Proposal",
"title": "Give Me Money",
"brief": "$$$",
"milestones": milestones,
"category": random.choice(CATEGORIES)
"category": random.choice(CATEGORIES),
"target": "123.456",
"payoutAddress": test_team[0]["accountAddress"],
"trustees": [test_team[0]["accountAddress"]],
"deadlineDuration": 100,
"voteDuration": 100
}
milestones = [
{
"title": "All the money straightaway",
"description": "cool stuff with it",
"date": "June 2019",
"payoutPercent": "100",
"immediatePayout": False
}
]
test_comment_message = {
"sig": "0x08d5922e48e44229a764d85000558ac9a603ee2ce6a4439a211de4c64a7c3e782efeea90d63760dafb155af53c1dadcec10dac682e1fff8df1b4f40f9fcf08891b",
"data": {