114 lines
2.6 KiB
Go
114 lines
2.6 KiB
Go
package cart
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestNordicTaxProvider_Name(t *testing.T) {
|
|
p := NewNordicTaxProvider("SE")
|
|
if got := p.Name(); got != "nordic" {
|
|
t.Errorf("Name() = %q, want %q", got, "nordic")
|
|
}
|
|
}
|
|
|
|
func TestNordicTaxProvider_ComputeTax(t *testing.T) {
|
|
tests := []struct {
|
|
total int64
|
|
taxRate int
|
|
want int64
|
|
desc string
|
|
}{
|
|
{0, 25, 0, "zero total"},
|
|
{1250, 25, 250, "25 % VAT on 1250"},
|
|
{1000, 20, 166, "20 % VAT on 1000"},
|
|
{1200, 25, 240, "25 % VAT on 1200"},
|
|
{25000, 25, 5000, "25 % VAT on 25000"},
|
|
{100, 10, 9, "10 % VAT on 100"},
|
|
{100, 100, 50, "100 % VAT on 100"},
|
|
{100, 0, 0, "zero-rate"},
|
|
{100, -1, 0, "negative rate -> zero"},
|
|
}
|
|
for _, tt := range tests {
|
|
p := NewNordicTaxProvider("SE")
|
|
got := p.ComputeTax(tt.total, tt.taxRate)
|
|
if got != tt.want {
|
|
t.Errorf("ComputeTax(%d, %d) [%s] = %d; want %d", tt.total, tt.taxRate, tt.desc, got, tt.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNordicTaxProvider_DefaultTaxRate(t *testing.T) {
|
|
tests := []struct {
|
|
country string
|
|
want int
|
|
desc string
|
|
}{
|
|
{"SE", 25, "Sweden"},
|
|
{"NO", 25, "Norway"},
|
|
{"DK", 25, "Denmark"},
|
|
{"FI", 25, "Finland"},
|
|
{"", 25, "empty -> default SE"},
|
|
{"DE", 25, "unknown -> fallback SE"},
|
|
}
|
|
for _, tt := range tests {
|
|
p := NewNordicTaxProvider("SE")
|
|
got := p.DefaultTaxRate(tt.country)
|
|
if got != tt.want {
|
|
t.Errorf("DefaultTaxRate(%q) [%s] = %d; want %d", tt.country, tt.desc, got, tt.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStaticTaxProvider_ComputeTax(t *testing.T) {
|
|
p := NewStaticTaxProvider()
|
|
tests := []struct {
|
|
total int64
|
|
taxRate int
|
|
want int64
|
|
}{
|
|
{1250, 25, 250},
|
|
{25000, 25, 5000},
|
|
{1000, 20, 166},
|
|
{0, 25, 0},
|
|
}
|
|
for _, tt := range tests {
|
|
got := p.ComputeTax(tt.total, tt.taxRate)
|
|
if got != tt.want {
|
|
t.Errorf("ComputeTax(%d, %d) = %d; want %d", tt.total, tt.taxRate, got, tt.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStaticTaxProvider_DefaultTaxRate(t *testing.T) {
|
|
p := NewStaticTaxProvider()
|
|
if got := p.DefaultTaxRate("SE"); got != 0 {
|
|
t.Errorf("StaticTaxProvider.DefaultTaxRate(\"SE\") = %d; want 0", got)
|
|
}
|
|
}
|
|
|
|
func TestComputeTax(t *testing.T) {
|
|
tests := []struct {
|
|
total int64
|
|
taxRate int
|
|
want int64
|
|
desc string
|
|
}{
|
|
{1250, 25, 250, "canonical: 25 %"},
|
|
{25000, 25, 5000, "25k with 25 %% -> 5k tax"},
|
|
{0, 25, 0, "zero total"},
|
|
}
|
|
for _, tt := range tests {
|
|
got := ComputeTax(tt.total, tt.taxRate)
|
|
if got != tt.want {
|
|
t.Errorf("ComputeTax(%d, %d) [%s] = %d; want %d", tt.total, tt.taxRate, tt.desc, got, tt.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTaxProviderImplementsInterface(t *testing.T) {
|
|
var p TaxProvider = NewNordicTaxProvider("SE")
|
|
_ = p
|
|
p2 := NewStaticTaxProvider()
|
|
_ = p2
|
|
}
|