Skip to content

AverSpec/aver-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aver for Go

Domain-driven acceptance testing for Go.

Install

go get github.com/averspec/aver-go

Quick Example

package cart_test

import (
    "fmt"
    "testing"

    aver "github.com/averspec/aver-go"
    "github.com/averspec/aver-go/protocols/unit"
    "github.com/stretchr/testify/assert"
)

// Domain
type CartDomain struct {
    AddItem aver.Action[AddItemPayload]
    HasItem aver.Assertion[HasItemPayload]
    Total   aver.Query[struct{}, float64]
}

type AddItemPayload struct{ SKU string; Qty int }
type HasItemPayload struct{ SKU string }

var Cart = aver.NewDomain[CartDomain]("Cart")

// Adapter
var adapter = aver.Implement(Cart, unit.New(NewApp), func(h *aver.HandlerBuilder[CartDomain, *App]) {
    aver.OnAction(h, Cart.D.AddItem, func(app *App, p AddItemPayload) error {
        app.items[p.SKU] += p.Qty
        return nil
    })
    aver.OnQuery(h, Cart.D.Total, func(app *App, _ struct{}) (float64, error) {
        return app.Total(), nil
    })
    aver.OnAssertion(h, Cart.D.HasItem, func(app *App, p HasItemPayload) error {
        if _, ok := app.items[p.SKU]; !ok {
            return fmt.Errorf("expected item %s", p.SKU)
        }
        return nil
    })
})

var s = aver.Suite(Cart, adapter)

// Tests
func TestAddItem(t *testing.T) {
    s.Run(t, "user adds item to cart", func(ctx *aver.TestContext[CartDomain]) {
        aver.When(ctx, Cart.D.AddItem, AddItemPayload{SKU: "ABC", Qty: 2})
        total := Cart.D.Total.From(ctx)
        assert.Equal(t, 19.98, total)
        aver.Then(ctx, Cart.D.HasItem, HasItemPayload{SKU: "ABC"})
    })
}

Run with go test:

go test ./...

Links

About

Domain-driven acceptance testing for Go

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages