Add support for custom fields in billing invoices

Customers (especially in Europe) need the ability to add Tax IDs, VAT IDs, and other custom fields to their invoices.

Fixes #106
This commit is contained in:
Joseph Schorr 2015-06-12 12:32:41 -04:00
parent 683d5080d8
commit e7fa560787
9 changed files with 426 additions and 8 deletions

View file

@ -19,7 +19,6 @@ from endpoints.api.build import (FileDropResource, RepositoryBuildStatus, Reposi
from endpoints.api.robot import (UserRobotList, OrgRobot, OrgRobotList, UserRobot,
RegenerateOrgRobot, RegenerateUserRobot, UserRobotPermissions,
OrgRobotPermissions)
from endpoints.api.trigger import (BuildTriggerActivate, BuildTriggerSources, BuildTriggerSubdirs,
TriggerBuildList, ActivateBuildTrigger, BuildTrigger,
BuildTriggerList, BuildTriggerAnalyze, BuildTriggerFieldValues)
@ -33,7 +32,9 @@ from endpoints.api.repotoken import RepositoryToken, RepositoryTokenList
from endpoints.api.prototype import PermissionPrototype, PermissionPrototypeList
from endpoints.api.logs import UserLogs, OrgLogs, RepositoryLogs
from endpoints.api.billing import (UserInvoiceList, UserCard, UserPlan, ListPlans,
OrgnaizationInvoiceList, OrganizationCard, OrganizationPlan)
OrgnaizationInvoiceList, OrganizationCard, OrganizationPlan,
UserInvoiceFieldList, UserInvoiceField,
OrganizationInvoiceFieldList, OrganizationInvoiceField)
from endpoints.api.discovery import DiscoveryResource
from endpoints.api.organization import (OrganizationList, OrganizationMember,
OrgPrivateRepositories, OrgnaizationMemberList,
@ -43,7 +44,6 @@ from endpoints.api.organization import (OrganizationList, OrganizationMember,
from endpoints.api.repository import RepositoryList, RepositoryVisibility, Repository
from endpoints.api.permission import (RepositoryUserPermission, RepositoryTeamPermission,
RepositoryTeamPermissionList, RepositoryUserPermissionList)
from endpoints.api.superuser import (SuperUserLogs, SuperUserList, SuperUserManagement,
SuperUserSendRecoveryEmail, UsageInformation,
SuperUserOrganizationManagement, SuperUserOrganizationList)
@ -4058,6 +4058,104 @@ class TestSuperUserManagement(ApiTestCase):
self._run_test('DELETE', 204, 'devtable', None)
class TestUserInvoiceFieldList(ApiTestCase):
def setUp(self):
ApiTestCase.setUp(self)
self._set_url(UserInvoiceFieldList)
def test_get_anonymous(self):
self._run_test('GET', 401, None, None)
def test_get_freshuser(self):
self._run_test('GET', 404, 'freshuser', None)
def test_get_reader(self):
self._run_test('GET', 404, 'reader', None)
def test_get_devtable(self):
self._run_test('GET', 200, 'devtable', None)
def test_post_anonymous(self):
self._run_test('POST', 401, None, None)
def test_post_freshuser(self):
self._run_test('POST', 404, 'freshuser', dict(title='foo', value='bar'))
def test_post_reader(self):
self._run_test('POST', 404, 'reader', dict(title='foo', value='bar'))
def test_post_devtable(self):
self._run_test('POST', 200, 'devtable', dict(title='foo', value='bar'))
class TestUserInvoiceField(ApiTestCase):
def setUp(self):
ApiTestCase.setUp(self)
self._set_url(UserInvoiceField, field_uuid='1234')
def test_get_anonymous(self):
self._run_test('DELETE', 401, None, None)
def test_get_freshuser(self):
self._run_test('DELETE', 404, 'freshuser', None)
def test_get_reader(self):
self._run_test('DELETE', 404, 'reader', None)
def test_get_devtable(self):
self._run_test('DELETE', 201, 'devtable', None)
class TestOrganizationInvoiceFieldList(ApiTestCase):
def setUp(self):
ApiTestCase.setUp(self)
self._set_url(OrganizationInvoiceFieldList, orgname='buynlarge')
def test_get_anonymous(self):
self._run_test('GET', 403, None, None)
def test_get_freshuser(self):
self._run_test('GET', 403, 'freshuser', None)
def test_get_reader(self):
self._run_test('GET', 403, 'reader', None)
def test_get_devtable(self):
self._run_test('GET', 200, 'devtable', None)
def test_post_anonymous(self):
self._run_test('POST', 403, None, dict(title='foo', value='bar'))
def test_post_freshuser(self):
self._run_test('POST', 403, 'freshuser', dict(title='foo', value='bar'))
def test_post_reader(self):
self._run_test('POST', 403, 'reader', dict(title='foo', value='bar'))
def test_post_devtable(self):
self._run_test('POST', 200, 'devtable', dict(title='foo', value='bar'))
class TestOrganizationInvoiceField(ApiTestCase):
def setUp(self):
ApiTestCase.setUp(self)
self._set_url(OrganizationInvoiceField, orgname='buynlarge', field_uuid='1234')
def test_get_anonymous(self):
self._run_test('DELETE', 403, None, None)
def test_get_freshuser(self):
self._run_test('DELETE', 403, 'freshuser', None)
def test_get_reader(self):
self._run_test('DELETE', 403, 'reader', None)
def test_get_devtable(self):
self._run_test('DELETE', 201, 'devtable', None)
if __name__ == '__main__':
unittest.main()