Beispiel #1
0
    def test_server_get_user_liabilities_endpoint(self):
        server = BackendServer(host=self.host, port=self.port)
        server.start()

        # make request with no portfolio leading to a none
        resp = requests.get(
            f"http://{self.host}:{self.port}/api/get_liabilities",
            params={"email": "*****@*****.**"})
        self.assertEqual(resp.status_code, 200)
        self.assertIsNone(resp.json())

        mock_port = utils.get_test_portfolio()
        InMemoryDataStore().update_user_portfolio("*****@*****.**",
                                                  mock_port)

        # test
        resp = requests.get(
            f"http://{self.host}:{self.port}/api/get_liabilities",
            params={"email": "*****@*****.**"})
        self.assertEqual(resp.status_code, 200)
        resp = resp.json()
        self.assertEqual(mock_port.current_liabilities.total, resp["current"])
        self.assertEqual(mock_port.long_term_liabilities.total, resp["long"])

        server.stop()
Beispiel #2
0
    def test_server_add_user_endpoint(self):
        server = BackendServer(host=self.host, port=self.port)
        server.start()

        # make a request on the add user end point as get
        resp = requests.get(f"http://{self.host}:{self.port}/api/add_user")
        self.assertEqual(resp.status_code, 405)

        # make valid request as post with user data
        u = utils.get_test_user()
        resp = requests.post(f"http://{self.host}:{self.port}/api/add_user",
                             json={
                                 "firstname": u.first_name,
                                 "lastname": u.last_name,
                                 "age": u.age,
                                 "email": u.email
                             })
        self.assertEqual(resp.status_code, 200)

        # make valid request with same email address
        resp = requests.post(f"http://{self.host}:{self.port}/api/add_user",
                             json={
                                 "firstname": u.first_name,
                                 "lastname": u.last_name,
                                 "age": u.age,
                                 "email": u.email
                             })
        self.assertEqual(500, resp.status_code)

        server.stop()
Beispiel #3
0
    def test_server_get_user_assets_endpoint(self):
        server = BackendServer(host=self.host, port=self.port)
        server.start()

        # make request with no portfolio leading to a none
        resp = requests.get(f"http://{self.host}:{self.port}/api/get_assets",
                            params={"email": "*****@*****.**"})
        self.assertEqual(resp.status_code, 200)
        self.assertIsNone(resp.json())

        # mock portfolio
        mock_port = utils.get_test_portfolio()
        InMemoryDataStore.update_user_portfolio("*****@*****.**",
                                                mock_port)

        # test
        resp = requests.get(f"http://{self.host}:{self.port}/api/get_assets",
                            params={"email": "*****@*****.**"})
        self.assertEqual(resp.status_code, 200)
        resp = resp.json()
        self.assertEqual(mock_port.cash_assets.total, resp["cash"])
        self.assertEqual(mock_port.invested_assets.total, resp["invested"])
        self.assertEqual(mock_port.use_assets.total, resp["use"])

        server.stop()
Beispiel #4
0
 def test_server_responds_to_http_request_on_base(self):
     server = BackendServer(host=self.host, port=self.port)
     server.start()
     time.sleep(1)  # sleep to allow server to start
     resp = requests.get(f"http://{self.host}:{self.port}")
     self.assertEqual(resp.status_code, 200)
     self.assertEqual(resp.text, "WebApp Index")
     server.stop()
Beispiel #5
0
    def test_server_shutdown(self):
        server = BackendServer(host=self.host, port=self.port)
        server.start()
        time.sleep(1)  # sleep to allow server to start
        server.stop()

        # try and bind to the socket and handle error
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((self.host,
                self.port))  # Try to open port - passes if connection is made
        s.close()
Beispiel #6
0
    def test_server_startup(self):
        server = BackendServer(host=self.host, port=self.port)
        server.start()
        time.sleep(1)  # sleep to allow server to start

        # try and bind to the socket and handle error
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        with self.assertRaises(OSError):
            s.bind((self.host, self.port))  # Try to open port
        s.close()

        server.stop()
Beispiel #7
0
    def test_server_update_user_portfolio_endpoint(self):
        server = BackendServer(host=self.host, port=self.port)
        server.start()

        # make a request on the end point as get
        resp = requests.get(
            f"http://{self.host}:{self.port}/api/update_user_portfolio")
        self.assertEqual(resp.status_code, 405)

        # make valid request to the endpoint
        json_data = dict()
        json_data["currency"] = Currencies.GBP.name
        json_data["email"] = "*****@*****.**"

        # generate asset and liabilities data
        cash, use, invested, current, long = utils.get_test_assets_and_liabilities(
        )

        # cash Assets
        vals = {utils.to_camel_case(k): v for k, v in cash.__dict__.items()}
        vals["other"] = cash.other.__dict__
        json_data["cashAssets"] = vals

        # use Assets
        vals = {utils.to_camel_case(k): v for k, v in use.__dict__.items()}
        vals["other"] = use.other.__dict__
        json_data["useAssets"] = vals

        # invested Assets
        vals = {
            utils.to_camel_case(k): v
            for k, v in invested.__dict__.items()
        }
        vals["otherTax"] = invested.other_tax.__dict__
        vals["otherBusiness"] = invested.other_business.__dict__
        json_data["investedAssets"] = vals

        vals = {utils.to_camel_case(k): v for k, v in current.__dict__.items()}
        vals["other"] = current.other.__dict__
        json_data["currentLiabilities"] = vals

        vals = {utils.to_camel_case(k): v for k, v in long.__dict__.items()}
        vals["other"] = long.other.__dict__
        json_data["longTermLiabilities"] = vals

        resp = requests.post(
            f"http://{self.host}:{self.port}/api/update_user_portfolio",
            json=json_data)
        self.assertEqual(resp.status_code, 200)

        server.stop()
Beispiel #8
0
    def test_server_get_user_endpoint(self):
        server = BackendServer(host=self.host, port=self.port)
        server.start()

        # make request without email in args
        resp = requests.get(f"http://{self.host}:{self.port}/api/get_user")
        self.assertEqual(resp.status_code, 500)

        # make request with email in args
        resp = requests.get(f"http://{self.host}:{self.port}/api/get_user",
                            params={"email": "*****@*****.**"})

        self.assertEqual(resp.json()["firstName"], "John")
        self.assertEqual(resp.json()["lastName"], "Doe")

        server.stop()
Beispiel #9
0
        os.makedirs(STORAGE_PATH)

    if "users.pck" in os.listdir(STORAGE_PATH):
        # load data into memory
        InMemoryDataStore(
            users_pck_file=os.path.join(STORAGE_PATH, "users.pck"))
    else:
        InMemoryDataStore().add_user("John", "Doe", 29, "*****@*****.**")

        cash = CashAssets(1, 2, 3, 4, 5, 6, Other("Test", 7))
        use = UseAssets(10, 20, 30, 40, 50, 60, Other("TestUse", 70))
        invested = InvestedAssets(1.5, Other("TestInvest",
                                             2.5), 3.5, 4.5, 5.5, 6.5, 7.5,
                                  8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5,
                                  Other("TestInvest", 16.5))
        current = CurrentLiabilities(0, 111.1, Other("TestCurrent", 21.3))
        long = LongTermLiabilities(10, 20, 30, 40, 50, 60, Other(amount=70))

        p = Portfolio(Currencies.GBP, cash, invested, use, current, long)

        InMemoryDataStore().update_user_portfolio("*****@*****.**", p)

    # start the servers
    server = BackendServer("localhost", 5000)
    server.start()
    _ = input("Hit enter to kill ... ")
    server.stop()

    # persist the data to disk
    InMemoryDataStore().save_to_disk()