def test_calc_account_nan_case(self):
        acc = Account(buffer_len=6, kw=True)
        asset1 = mock.MagicMock(Asset)
        asset2 = mock.MagicMock(Asset)

        asset1.get_margin_requirements.return_value = np.nan
        asset2.get_margin_requirements.return_value = 200

        acc._position = {
            asset1: (1, 2, 3, None),
            asset2: (2, 2, 3, None)
        }

        self.assertRaises(ValueError, acc._calc_account_margin, pd.Timestamp('2018-01-02'))
    def test_calc_account_margin(self):
        acc = Account(buffer_len=6, kw=True)
        asset1 = mock.MagicMock(Asset)
        asset2 = mock.MagicMock(Asset)

        asset1.get_margin_requirements.return_value = 100
        asset2.get_margin_requirements.return_value = 200

        acc._position = {
            asset1: (1, 2, 3, None),
            asset2: (2, 2, 3, None)
        }

        margin = acc._calc_account_margin(pd.Timestamp('2018-01-02'))
        self.assertEqual(margin, 300)
        self.assertEqual((pd.Timestamp('2018-01-02'), 1), asset1.get_margin_requirements.call_args[0])
        self.assertEqual((pd.Timestamp('2018-01-02'), 2), asset2.get_margin_requirements.call_args[0])
    def test_position(self):
        acc = Account(buffer_len=6, kw=True)
        asset1 = mock.MagicMock(Asset)
        asset2 = mock.MagicMock(Asset)


        acc._position = {
            asset1: (1, 2, 3, None),
            asset2: (2, 2, 3, None)
        }

        p = acc.position()

        self.assertEqual(True, isinstance(p, dict))

        self.assertEqual(True, asset1 in p)
        self.assertEqual(True, asset2 in p)

        self.assertTrue(isinstance(p[asset1], PositionInfo))
        self.assertTrue(isinstance(p[asset2], PositionInfo))
        self.assertEqual(asset1, p[asset1].asset)
        self.assertEqual(asset2, p[asset2].asset)
        self.assertEqual(1, p[asset1].qty)
        self.assertEqual(2, p[asset2].qty)