Ejemplo n.º 1
0
    def test_endpoint(self):
        customer = invoiced.Customer(self.client, 123)
        self.assertEqual('/customers/123', customer.endpoint())

        customer.set_endpoint_base('/blah')
        self.assertEqual('/blah', customer.endpoint_base())
        self.assertEqual('/blah/customers/123', customer.endpoint())
Ejemplo n.º 2
0
    def test_list_pending_line_items(self):
        responses.add(
            'GET',
            'https://api.invoiced.com/customers/123/line_items',
            status=200,
            json=[{
                "id": 456,
                "unit_cost": 500
            }],
            adding_headers={
                'x-total-count':
                '10',
                'link':
                '<https://api.invoiced.com/customers/123/line_items?per_page=25&page=1>; rel="self", <https://api.invoiced.com/customers/123/line_items?per_page=25&page=1>; rel="first", <https://api.invoiced.com/customers/123/line_items?per_page=25&page=1>; rel="last"'
            })  # noqa

        customer = invoiced.Customer(self.client, 123)
        line_items, metadata = customer.line_items().list()

        self.assertIsInstance(line_items, list)
        self.assertEqual(len(line_items), 1)
        self.assertEqual(line_items[0].id, 456)

        self.assertIsInstance(metadata, invoiced.List)
        self.assertEqual(metadata.total_count, 10)
Ejemplo n.º 3
0
    def test_delete(self):
        responses.add('DELETE',
                      'https://api.invoiced.com/customers/123',
                      status=204)

        customer = invoiced.Customer(self.client, 123)
        self.assertTrue(customer.delete())
Ejemplo n.º 4
0
    def test_list(self):
        responses.add(
            'GET',
            'https://api.invoiced.com/customers/1234/payment_sources',  # noqa
            status=200,
            json=[{
                "id": 123,
                "object": "bank_account"
            }, {
                "id": 456,
                "object": "card"
            }],
            adding_headers={
                'x-total-count':
                '15',
                'link':
                '<https://api.invoiced.com/payment_sources?per_page=25&page=1>; rel="self", <https://api.invoiced.com/payment_sources?per_page=25&page=1>; rel="first", <https://api.invoiced.com/contacts?per_page=25&page=1>; rel="last"'
            })  # noqa

        customer = invoiced.Customer(self.client, 1234)
        sources, metadata = customer.payment_sources().list()

        self.assertIsInstance(sources, list)
        self.assertEqual(len(sources), 2)
        self.assertEqual(sources[0].id, 123)
        self.assertIsInstance(sources[0], invoiced.BankAccount)
        self.assertIsInstance(sources[1], invoiced.Card)

        self.assertIsInstance(metadata, invoiced.List)
        self.assertEqual(metadata.total_count, 15)
Ejemplo n.º 5
0
    def test_list_notes(self):
        responses.add(
            'GET',
            'https://api.invoiced.com/customers/123/notes',
            status=200,
            json=[{
                "id": 567,
                "notes": "Text of note"
            }],
            adding_headers={
                'x-total-count':
                '10',
                'link':
                '<https://api.invoiced.com/customers/123/notes?per_page=25&page=1>; rel="self", <https://api.invoiced.com/customers/123/notes?per_page=25&page=1>; rel="first", <https://api.invoiced.com/customers/123/notes?per_page=25&page=1>; rel="last"'
            })  # noqa

        customer = invoiced.Customer(self.client, 123)
        notes, metadata = customer.list_notes().list()

        self.assertIsInstance(notes, list)
        self.assertEqual(len(notes), 1)
        self.assertEqual(notes[0].id, 567)

        self.assertIsInstance(metadata, invoiced.List)
        self.assertEqual(metadata.total_count, 10)
Ejemplo n.º 6
0
    def test_accessors(self):
        customer = invoiced.Customer(self.client, 123, {'name': 'Pied Piper'})

        self.assertEqual(customer.id, 123)
        self.assertEqual(customer.name, 'Pied Piper')
        self.assertEqual(customer['name'], 'Pied Piper')

        customer.name = 'Renamed'
        self.assertEqual(customer.name, 'Renamed')

        customer['name'] = 'Pied Piper'
        self.assertEqual(customer['name'], 'Pied Piper')

        self.assertEqual({'id': 123, 'name': 'Pied Piper'}, dict(customer))

        customer.refresh_from({'id': 123, 'notes': '....'})

        self.assertEqual('....', customer.notes)
        # name attribute should no longer be available
        with self.assertRaises(AttributeError):
            customer.name

        del customer._client

        with self.assertRaises(KeyError):
            del customer.name

        customer['notes'] = '....'
        del customer['notes']
        with self.assertRaises(AttributeError):
            customer.notes

        customer.update({'name': 'Test'})
        self.assertEqual(customer.name, 'Test')
Ejemplo n.º 7
0
    def test_str(self):
        customer = invoiced.Customer(self.client, 123, {'name': 'Pied Piper'})

        self.assertEqual(
            customer.__str__(),
            "{\n  \"id\": 123,\n  \"name\": \"Pied Piper\"\n}")  # noqa
        self.assertEqual(
            customer.__repr__(), "<Customer id=123 at " + hex(id(customer)) +
            "> JSON: {\n  \"id\": 123,\n  \"name\": \"Pied Piper\"\n}")  # noqa
Ejemplo n.º 8
0
    def test_retrieve_note(self):
        responses.add('GET',
                      'https://api.invoiced.com/customers/123/notes/567',
                      status=200,
                      json={
                          "id": 567,
                          "notes": "Text of note"
                      })

        customer = invoiced.Customer(self.client, 123)
        note = customer.list_notes().retrieve(567)

        self.assertIsInstance(note, invoiced.Note)
        self.assertEqual(note.id, 567)
        self.assertEqual(note.notes, "Text of note")
Ejemplo n.º 9
0
    def test_create_pending_line_item(self):
        responses.add('POST',
                      'https://api.invoiced.com/customers/123/line_items',
                      status=201,
                      json={
                          "id": 456,
                          "unit_cost": 500
                      })

        customer = invoiced.Customer(self.client, 123)
        line_item = customer.line_items().create(unit_cost=500)

        self.assertIsInstance(line_item, invoiced.LineItem)
        self.assertEqual(line_item.id, 456)
        self.assertEqual(line_item.unit_cost, 500)
Ejemplo n.º 10
0
    def test_update(self):
        responses.add('PATCH',
                      'https://api.invoiced.com/customers/123',
                      status=200,
                      json={
                          "id": 123,
                          "name": "Pied Piper",
                          "notes": "Terrible customer"
                      })  # noqa

        customer = invoiced.Customer(self.client, 123)
        customer.notes = 'Terrible customer'
        self.assertTrue(customer.save())

        self.assertEqual(customer.notes, "Terrible customer")
Ejemplo n.º 11
0
    def test_invoice(self):
        responses.add('POST',
                      'https://api.invoiced.com/customers/123/invoices',
                      status=201,
                      json={
                          "id": 456,
                          "total": 500
                      })

        customer = invoiced.Customer(self.client, 123)
        invoice = customer.invoice()

        self.assertIsInstance(invoice, invoiced.Invoice)
        self.assertEqual(invoice.id, 456)
        self.assertEqual(invoice.total, 500)
Ejemplo n.º 12
0
    def test_retrieve_contact(self):
        responses.add('GET',
                      'https://api.invoiced.com/customers/123/contacts/456',
                      status=200,
                      json={
                          "id": "456",
                          "name": "Nancy"
                      })

        customer = invoiced.Customer(self.client, 123)
        contact = customer.contacts().retrieve(456)

        self.assertIsInstance(contact, invoiced.Contact)
        self.assertEqual(contact.id, '456')
        self.assertEqual(contact.name, "Nancy")
Ejemplo n.º 13
0
    def test_create_contact(self):
        responses.add('POST',
                      'https://api.invoiced.com/customers/123/contacts',
                      status=201,
                      json={
                          "id": 456,
                          "name": "Nancy"
                      })

        customer = invoiced.Customer(self.client, 123)
        contact = customer.contacts().create(name="Nancy")

        self.assertIsInstance(contact, invoiced.Contact)
        self.assertEqual(contact.id, 456)
        self.assertEqual(contact.name, "Nancy")
Ejemplo n.º 14
0
    def test_retrieve_pending_line_item(self):
        responses.add('GET',
                      'https://api.invoiced.com/customers/123/line_items/456',
                      status=200,
                      json={
                          "id": "456",
                          "unit_cost": 500
                      })

        customer = invoiced.Customer(self.client, 123)
        line_item = customer.line_items().retrieve(456)

        self.assertIsInstance(line_item, invoiced.LineItem)
        self.assertEqual(line_item.id, '456')
        self.assertEqual(line_item.unit_cost, 500)
Ejemplo n.º 15
0
    def test_create_note(self):
        responses.add('POST',
                      'https://api.invoiced.com/customers/123/notes',
                      status=201,
                      json={
                          "id": 567,
                          "notes": "Text of note"
                      })

        customer = invoiced.Customer(self.client, 123)
        note = customer.list_notes().create(customer_id=123,
                                            notes="Text of note")

        self.assertIsInstance(note, invoiced.Note)
        self.assertEqual(note.id, 567)
        self.assertEqual(note.notes, "Text of note")
Ejemplo n.º 16
0
    def test_send_statement(self):
        responses.add('POST',
                      'https://api.invoiced.com/customers/123/emails',
                      status=201,
                      json=[{
                          "id": 4567,
                          "email": "*****@*****.**"
                      }])

        customer = invoiced.Customer(self.client, 123)
        emails = customer.send_statement()

        self.assertEqual(type(emails), list)
        self.assertEqual(len(emails), 1)
        self.assertIsInstance(emails[0], invoiced.Email)
        self.assertEqual(emails[0].id, 4567)
Ejemplo n.º 17
0
    def test_send_statement_letter(self):
        responses.add('POST',
                      'https://api.invoiced.com/customers/123/letters',
                      status=201,
                      json=[{
                          "id": 891,
                          "state": "queued"
                      }])

        customer = invoiced.Customer(self.client, 123)
        letters = customer.send_statement_letter()

        self.assertEqual(type(letters), list)
        self.assertEqual(len(letters), 1)
        self.assertIsInstance(letters[0], invoiced.Letter)
        self.assertEqual(letters[0].id, 891)
Ejemplo n.º 18
0
    def test_endpoint_and_create_card(self):
        responses.add(
            'POST',
            'https://api.invoiced.com/customers/1234/payment_sources',  # noqa
            status=201,
            json={
                "id": 456,
                "object": "card"
            })

        customer = invoiced.Customer(self.client, 1234)
        source = customer.payment_sources().create()
        # if true, endpoint on creation is correct
        self.assertEqual(456, source.id)
        # if true, endpoint after creation is correct
        self.assertEqual("/customers/1234/cards/456", source.endpoint())
Ejemplo n.º 19
0
    def test_consolidate_invoices(self):
        responses.add(
            'POST',
            'https://api.invoiced.com/customers/123/consolidate_invoices',  # noqa
            status=201,
            json={
                "id": 123456,
                "total": 567890
            })

        customer = invoiced.Customer(self.client, 123)
        invoice = customer.consolidate_invoices()

        self.assertIsInstance(invoice, invoiced.Invoice)
        self.assertEqual(invoice.id, 123456)
        self.assertEqual(invoice.total, 567890)
Ejemplo n.º 20
0
    def test_send_statement_sms(self):
        responses.add(
            'POST',
            'https://api.invoiced.com/customers/123/text_messages',  # noqa
            status=201,
            json=[{
                "id": 890,
                "message": "example"
            }])

        customer = invoiced.Customer(self.client, 123)
        text_messages = customer.send_statement_sms(message="example")

        self.assertEqual(type(text_messages), list)
        self.assertEqual(len(text_messages), 1)
        self.assertIsInstance(text_messages[0], invoiced.TextMessage)
        self.assertEqual(text_messages[0].id, 890)
Ejemplo n.º 21
0
    def test_delete_card(self):
        responses.add(
            'POST',
            'https://api.invoiced.com/customers/1234/payment_sources',  # noqa
            status=201,
            json={
                "id": 123,
                "object": "card"
            })

        responses.add('DELETE',
                      'https://api.invoiced.com/customers/1234/cards/123',
                      status=204)

        customer = invoiced.Customer(self.client, 1234)
        source = customer.payment_sources().create()

        self.assertIsInstance(source, invoiced.Card)
        self.assertTrue(source.delete())
Ejemplo n.º 22
0
    def test_balance(self):
        responses.add('GET',
                      'https://api.invoiced.com/customers/123/balance',
                      status=200,
                      json={
                          "total_outstanding": 1000,
                          "available_credits": 0,
                          "past_due": True
                      })  # noqa

        customer = invoiced.Customer(self.client, 123)
        balance = customer.balance()

        expected = {
            'past_due': True,
            'available_credits': 0,
            'total_outstanding': 1000
        }

        self.assertEqual(balance, expected)
Ejemplo n.º 23
0
    def test_cannot_access_private(self):
        customer = invoiced.Customer(self.client)

        with self.assertRaises(AttributeError):
            customer._private
Ejemplo n.º 24
0
    def test_empty_string_error(self):
        customer = invoiced.Customer(self.client)

        with self.assertRaises(ValueError):
            customer.test = ''
Ejemplo n.º 25
0
 def test_endpoint(self):
     customer = invoiced.Customer(self.client, 123)
     self.assertEqual('/customers/123', customer.endpoint())
Ejemplo n.º 26
0
    def test_missing_id(self):
        customer = invoiced.Customer(self.client)

        with self.assertRaises(ValueError):
            customer.retrieve(False)
Ejemplo n.º 27
0
 def test_update_no_params(self):
     customer = invoiced.Customer(self.client, 123)
     self.assertFalse(customer.save())