# -*- coding: utf-8 -*- """ stamps.tests ~~~~~~~~~~~~ Stamps.com API tests. :copyright: 2014 by Jonathan Zempel. :license: BSD, see LICENSE for more details. """ from .config import StampsConfiguration from .services import StampsService from datetime import date, datetime from time import sleep from unittest import TestCase import logging import os logging.basicConfig() logging.getLogger("suds.client").setLevel(logging.DEBUG) file_path = os.path.abspath(__file__) directory_path = os.path.dirname(file_path) file_name = os.path.join(directory_path, "tests.cfg") CONFIGURATION = StampsConfiguration(wsdl="testing", file_name=file_name) def get_rate(service): """Get a test rate. :param service: Instance of the stamps service. """ ret_val = service.create_shipping() ret_val.ShipDate = date.today().isoformat() ret_val.FromZIPCode = "94107" ret_val.ToZIPCode = "20500" ret_val.PackageType = "Package" rate = service.get_rates(ret_val)[0] ret_val.Amount = rate.Amount ret_val.ServiceType = rate.ServiceType ret_val.DeliverDays = rate.DeliverDays ret_val.DimWeighting = rate.DimWeighting ret_val.Zone = rate.Zone ret_val.RateCategory = rate.RateCategory ret_val.ToState = rate.ToState add_on = service.create_add_on() add_on.AddOnType = "US-A-DC" ret_val.AddOns.AddOnV15.append(add_on) return ret_val def get_from_address(service): """Get a test 'from' address. :param service: Instance of the stamps service. """ address = service.create_address() address.FullName = "Pickwick & Weller" address.Address1 = "300 Brannan St." address.Address2 = "Suite 405" address.City = "San Francisco" address.State = "CA" return service.get_address(address).Address def get_to_address(service): """Get a test 'to' address. :param service: Instance of the stamps service. """ address = service.create_address() address.FullName = "POTUS" address.Address1 = "1600 Pennsylvania Avenue NW" address.City = "Washington" address.State = "DC" return service.get_address(address).Address class StampsTestCase(TestCase): initialized = False def setUp(self): if not StampsTestCase.initialized: self.service = StampsService(CONFIGURATION) StampsTestCase.initalized = True def _test_0(self): """Test account registration. """ registration = self.service.create_registration() type = self.service.create("CodewordType") registration.Codeword1Type = type.Last4SocialSecurityNumber registration.Codeword1 = 1234 registration.Codeword2Type = type.Last4DriversLicense registration.Codeword2 = 1234 registration.PhysicalAddress = get_from_address(self.service) registration.MachineInfo.IPAddress = "127.0.0.1" registration.Email = "sws-support@stamps.com" type = self.service.create("AccountType") registration.AccountType = type.OfficeBasedBusiness result = self.service.register_account(registration) print result def _test_1(self): """Test postage purchase. """ transaction_id = datetime.now().isoformat() result = self.service.add_postage(10, transaction_id=transaction_id) transaction_id = result.TransactionID status = self.service.create_purchase_status() seconds = 4 while result.PurchaseStatus in (status.Pending, status.Processing): seconds = 32 if seconds * 2 >= 32 else seconds * 2 print "Waiting {0:d} seconds to get status...".format(seconds) sleep(seconds) result = self.service.get_postage_status(transaction_id) print result def test_2(self): """Test label generation. """ self.service = StampsService(CONFIGURATION) rate = get_rate(self.service) from_address = get_from_address(self.service) to_address = get_to_address(self.service) transaction_id = datetime.now().isoformat() label = self.service.get_label(from_address, to_address, rate, transaction_id=transaction_id) self.service.get_tracking(label.StampsTxID) self.service.get_tracking(label.TrackingNumber) self.service.remove_label(label.StampsTxID) print label def test_3(self): """Test authentication retry. """ self.service.get_account() authenticator = self.service.plugin.authenticator self.service.get_account() self.service.plugin.authenticator = authenticator result = self.service.get_account() print result