package chain_of_responsibility

import (
	"encoding/json"
	"testing"
)

func TestCORPattern(t *testing.T) {
	book := Book{"Go design patterns", "Ismayil Malik"}
	bytes, _ := json.Marshal(book)
	bookDb := &BookDb{
		make(map[string]Book),
		nil,
	}
	logger := &Logger{
		next: bookDb,
	}
	chain := &Deserializer{
		next: logger,
	}

	t.Run(`It will be unmurshalled on deserializer handler then will be logged
		  on logger handler and at the end will be presisted by third handler`, func(t *testing.T) {

		err := chain.Handle(bytes)
		if err != nil {
			t.Fatalf("Something went wrong: %s", err.Error())
		}

		storedBook := bookDb.store[book.Title]
		if storedBook != book {
			t.Errorf("Expected %b but got %b", book, storedBook)
		}
	})

}