Files
gocryptotrader/currency/conversion_test.go
Andrew 0c76789b0d Database interface & auditing feature (#332)
* added audit manager

* Basic database DOA setup

* Added base config file

* added sqlite support and creation of schema

* added basic tests and config entry

* corrected issues of database is disabled

* fixed path for test

* WIP

* Added tests fixed config checking

* reverted files back to upstream

* reverted go.mod files

* no more test test test

* removed local testing details for psql

* hello

* added comments

* increased ping to 30 seconds

* renamed database table and added additional condition around test

* removed database test details

* goimport ran on all files

* WIP

* first attempt at migration

* fixes for migration system

* Migration system logger interface implemented

* fixes to print functions

* added write pooling pass

* gofmt :D

* formatted imports correctly

* removed old code

* added creation of migration

* gofmt

* :D Hello

*  🏎️

* maybe one day i will remember to revert go mod files

* checked err return condition correctly

* first changes for PR feedback

* code clean up

* protect Connected with RWmutex & event with mutex

* : D

* we can just pretend like it never happened

* MOved migrations back to source directory and added README

* readme formatting update

* Addd command line override for datadir

* use correct var when creating a migration and confirm folder is created

* Check if database version is newer than latest migration and also you know make migrations work.....

* uses filepath instead of manual path to use correct path seperator

* Add connection message and lower timeout

* Added support for sslmode for psql

* no longer force Close of database instead allow driver to maage

* Added closer func to test output

* sslmode added to example config
2019-08-20 16:35:06 +10:00

177 lines
4.1 KiB
Go

package currency
import (
"strings"
"testing"
)
func TestNewConversionFromString(t *testing.T) {
expected := "AUDUSD"
conv, err := NewConversionFromString(expected)
if err != nil {
t.Error("Test Failed - NewConversionFromString() error", err)
}
if conv.String() != expected {
t.Errorf("Test Failed - NewConversion() error expected %s but received %s",
expected,
conv)
}
newexpected := strings.ToLower(expected)
conv, err = NewConversionFromString(newexpected)
if err != nil {
t.Error("Test Failed - NewConversionFromString() error", err)
}
if conv.String() != newexpected {
t.Errorf("Test Failed - NewConversion() error expected %s but received %s",
newexpected,
conv)
}
}
func TestNewConversionFromStrings(t *testing.T) {
from := "AUD"
to := "USD"
expected := "AUDUSD"
conv, err := NewConversionFromStrings(from, to)
if err != nil {
t.Error("Test Failed - NewConversionFromString() error", err)
}
if conv.String() != expected {
t.Errorf("Test Failed - NewConversion() error expected %s but received %s",
expected,
conv)
}
}
func TestNewConversion(t *testing.T) {
from := NewCode("AUD")
to := NewCode("USD")
expected := "AUDUSD"
conv, err := NewConversion(from, to)
if err != nil {
t.Error("Test Failed - NewConversionFromCode() error", err)
}
if conv.String() != expected {
t.Errorf("Test Failed - NewConversion() error expected %s but received %s",
expected,
conv)
}
}
func TestConversionIsInvalid(t *testing.T) {
from := AUD
to := USD
conv, err := NewConversion(from, to)
if err != nil {
t.Fatal("Test Failed - NewConversion() error", err)
}
if conv.IsInvalid() {
t.Errorf("Test Failed - IsInvalid() error expected false but received %v",
conv.IsInvalid())
}
to = AUD
conv, err = NewConversion(from, to)
if err == nil {
t.Fatal("Test Failed - NewConversion() error", err)
}
}
func TestConversionIsFiatPair(t *testing.T) {
from := AUD
to := USD
conv, err := NewConversion(from, to)
if err != nil {
t.Fatal("Test Failed - NewConversion() error", err)
}
if !conv.IsFiat() {
t.Errorf("Test Failed - IsFiatPair() error expected true but received %v",
conv.IsFiat())
}
to = LTC
conv, err = NewConversion(from, to)
if err == nil {
t.Fatal("Test Failed - NewConversion() error", err)
}
}
func TestConversionsRatesSystem(t *testing.T) {
var SuperDuperConversionSystem ConversionRates
if SuperDuperConversionSystem.HasData() {
t.Fatalf("Test Failed - HasData() error expected false but received %v",
SuperDuperConversionSystem.HasData())
}
testmap := map[string]float64{
"USDAUD": 1.3969317581,
"USDBRL": 3.7047257979,
"USDCAD": 1.3186386881,
"USDCHF": 1,
"USDCNY": 6.7222712044,
"USDCZK": 22.6406277552,
"USDDKK": 6.5785575736,
"USDEUR": 0.8816787163,
"USDGBP": 0.7665755599,
"USDHKD": 7.8492329395,
"USDILS": 3.6152354082,
"USDINR": 71.154558279,
"USDJPY": 110.7476635514,
"USDKRW": 1122.7913948157,
"USDMXN": 19.1589666725,
"USDNOK": 8.5818197849,
"USDNZD": 1.4559160642,
"USDPLN": 3.8304531829,
"USDRUB": 65.7533062952,
"USDSEK": 9.3196085346,
"USDSGD": 1.3512608006,
"USDTHB": 31.0950449656,
"USDZAR": 14.138070887,
}
err := SuperDuperConversionSystem.Update(testmap)
if err != nil {
t.Fatal("Test Failed - Update() error", err)
}
err = SuperDuperConversionSystem.Update(nil)
if err == nil {
t.Fatal("Test Failed - Update() error cannot be nil")
}
if !SuperDuperConversionSystem.HasData() {
t.Fatalf("Test Failed - HasData() error expected true but received %v",
SuperDuperConversionSystem.HasData())
}
// * to a rate
p := SuperDuperConversionSystem.m[USD.Item][AUD.Item]
// inverse * to a rate
pi := SuperDuperConversionSystem.m[AUD.Item][USD.Item]
r := *p * 1000
expectedRate := 1396.9317581
if r != expectedRate {
t.Errorf("Test Failed - Convert() error expected %.13f but received %.13f",
expectedRate,
r)
}
inverseR := *pi * expectedRate
expectedInverseRate := float64(1000)
if inverseR != expectedInverseRate {
t.Errorf("Test Failed - Convert() error expected %.13f but received %.13f",
expectedInverseRate,
inverseR)
}
}