Skip to content

Commit

Permalink
[v0.1.10] fix test, implement common before and after
Browse files Browse the repository at this point in the history
  • Loading branch information
siller174 committed Dec 29, 2022
1 parent c5adcc0 commit 1dbb28a
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 42 deletions.
102 changes: 85 additions & 17 deletions builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,27 @@ import (
const defaultHTTPTimeout = 30

var (
errorFunctionIsNil = "Function must be not nil"
errorAssertIsNil = "Assert must be not nil"
errorAssertIsNil = "Assert must be not nil"
)

// HTTPTestMaker is a creator tests
type HTTPTestMaker struct {
httpClient *http.Client
middleware *Middleware

hardValidation bool

// todo add marshaler
}

type options struct {
httpClient *http.Client
httpTimeout time.Duration
httpRoundTripper http.RoundTripper

middleware *Middleware

hardValidation bool
}

type Option func(*options)
Expand All @@ -49,10 +56,48 @@ func WithCustomHTTPRoundTripper(r http.RoundTripper) Option {
}
}

// WithMiddlewareAfter ...
func WithMiddlewareAfter(after ...AfterExecute) Option {
return func(o *options) {
o.middleware.After = append(o.middleware.After, after...)
}
}

// WithMiddlewareAfterT ...
func WithMiddlewareAfterT(after ...AfterExecuteT) Option {
return func(o *options) {
o.middleware.AfterT = append(o.middleware.AfterT, after...)
}
}

// WithMiddlewareBefore ...
func WithMiddlewareBefore(before ...BeforeExecute) Option {
return func(o *options) {
o.middleware.Before = append(o.middleware.Before, before...)
}
}

// WithMiddlewareBeforeT ...
func WithMiddlewareBeforeT(beforeT ...BeforeExecuteT) Option {
return func(o *options) {
o.middleware.BeforeT = append(o.middleware.BeforeT, beforeT...)
}
}

// WithHardValidation ...
func WithHardValidation() Option {
return func(o *options) {
o.hardValidation = true
}
}

// NewHTTPTestMaker is function for set options for all cute.
func NewHTTPTestMaker(opts ...Option) *HTTPTestMaker {
var (
o = new(options)
o = &options{
middleware: new(Middleware),
}

timeout = defaultHTTPTimeout * time.Second
roundTripper = http.DefaultTransport
)
Expand Down Expand Up @@ -80,17 +125,18 @@ func NewHTTPTestMaker(opts ...Option) *HTTPTestMaker {

m := &HTTPTestMaker{
httpClient: httpClient,
middleware: o.middleware,
}

return m
}

// NewTestBuilder is a function for initialization foundation for cute
func (m *HTTPTestMaker) NewTestBuilder() AllureBuilder {
tests := createDefaultTests(m.httpClient)
tests := createDefaultTests(m)

return &cute{
httpClient: m.httpClient,
baseProps: m,
countTests: 0,
tests: tests,
allureInfo: new(allureInformation),
Expand All @@ -100,18 +146,38 @@ func (m *HTTPTestMaker) NewTestBuilder() AllureBuilder {
}
}

func createDefaultTests(client *http.Client) []*Test {
func createDefaultTests(m *HTTPTestMaker) []*Test {
tests := make([]*Test, 1)
tests[0] = createDefaultTest(client)
tests[0] = createDefaultTest(m)

return tests
}

func createDefaultTest(httpClient *http.Client) *Test {
func createDefaultTest(m *HTTPTestMaker) *Test {
after := make([]AfterExecute, 0, 0)
copy(after, m.middleware.After)

afterT := make([]AfterExecuteT, 0, 0)
copy(afterT, m.middleware.AfterT)

before := make([]BeforeExecute, 0, 0)
copy(before, m.middleware.Before)

beforeT := make([]BeforeExecuteT, 0, 0)
copy(beforeT, m.middleware.BeforeT)

middleware := &Middleware{
After: after,
AfterT: afterT,
Before: before,
BeforeT: beforeT,
}

return &Test{
httpClient: httpClient,
AllureStep: new(AllureStep),
Middleware: new(Middleware),
HardValidation: m.hardValidation,
httpClient: m.httpClient,
Middleware: middleware,
AllureStep: new(AllureStep),
Request: &Request{
Repeat: new(RequestRepeatPolitic),
},
Expand Down Expand Up @@ -239,10 +305,6 @@ func (it *cute) Feature(feature string) AllureBuilder {
return it
}

func (it *cute) CreateWithStep() StepBuilder {
return it
}

func (it *cute) Create() MiddlewareRequest {
return it
}
Expand Down Expand Up @@ -525,6 +587,12 @@ func (it *cute) OptionalAssertResponseT(asserts ...AssertResponseT) ExpectHTTPBu
return it
}

func (it *cute) EnableHardValidation() ExpectHTTPBuilder {
it.tests[it.countTests].HardValidation = true

return it
}

func (it *cute) CreateTableTest() MiddlewareTable {
it.isTableTest = true

Expand All @@ -544,7 +612,7 @@ func (it *cute) PutNewTest(name string, r *http.Request, expect *Expect) TableTe
}
}

newTest := createDefaultTest(it.httpClient)
newTest := createDefaultTest(it.baseProps)
newTest.Expect = expect
newTest.Name = name
newTest.Request.Base = r
Expand Down Expand Up @@ -576,7 +644,7 @@ func (it *cute) PutTests(params ...*Test) TableTest {
func (it *cute) NextTest() NextTestBuilder {
it.countTests++ // async?

it.tests = append(it.tests, createDefaultTest(it.httpClient))
it.tests = append(it.tests, createDefaultTest(it.baseProps))

return it
}
20 changes: 13 additions & 7 deletions builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ func TestNewTestBuilder(t *testing.T) {
require.NotNil(t, ht.tests[0].Middleware)
require.NotNil(t, ht.tests[0].AllureStep)
require.NotNil(t, ht.allureInfo)
require.NotNil(t, ht.httpClient)
require.NotNil(t, ht.baseProps.httpClient)
}

func TestHTTPTestMaker(t *testing.T) {
Expand Down Expand Up @@ -312,14 +312,18 @@ func TestHTTPTestMaker(t *testing.T) {
}

func TestCreateDefaultTest(t *testing.T) {
defaultClient := http.DefaultClient
resTest := createDefaultTest(&HTTPTestMaker{httpClient: http.DefaultClient, middleware: new(Middleware)})

resTest := createDefaultTest(defaultClient)
require.Equal(t, &Test{
httpClient: http.DefaultClient,
Name: "",
AllureStep: new(AllureStep),
Middleware: new(Middleware),
Middleware: &Middleware{
After: make([]AfterExecute, 0, 0),
AfterT: make([]AfterExecuteT, 0, 0),
Before: make([]BeforeExecute, 0, 0),
BeforeT: make([]BeforeExecuteT, 0, 0),
},
Request: &Request{
Repeat: new(RequestRepeatPolitic),
},
Expand All @@ -338,10 +342,12 @@ func TestCreateTableTest(t *testing.T) {

func TestPutNewTest(t *testing.T) {
tests := make([]*Test, 1)
tests[0] = createDefaultTest(http.DefaultClient)
tests[0] = createDefaultTest(&HTTPTestMaker{httpClient: http.DefaultClient, middleware: new(Middleware)})

var (
c = &cute{tests: tests}
c = &cute{tests: tests, baseProps: &HTTPTestMaker{
middleware: &Middleware{},
}}
reqOne, _ = http.NewRequest("GET", "URL_1", nil)
expectOne = &Expect{Code: 200}
reqSecond, _ = http.NewRequest("POST", "URL_1", nil)
Expand All @@ -362,7 +368,7 @@ func TestPutNewTest(t *testing.T) {

func TestPutTests(t *testing.T) {
var (
tests = createDefaultTests(http.DefaultClient)
tests = createDefaultTests(&HTTPTestMaker{httpClient: http.DefaultClient, middleware: new(Middleware)})
c = &cute{tests: tests}
reqOne, _ = http.NewRequest("GET", "URL_1", nil)
expectOne = &Expect{Code: 200}
Expand Down
3 changes: 1 addition & 2 deletions cute.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package cute

import (
"context"
"net/http"
"strings"
"testing"

Expand All @@ -13,7 +12,7 @@ import (
)

type cute struct {
httpClient *http.Client
baseProps *HTTPTestMaker

parallel bool

Expand Down
14 changes: 4 additions & 10 deletions interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,21 +53,11 @@ type AllureLabelsBuilder interface {
Labels(labels ...*allure.Label) AllureBuilder
}

// StepBuilder is a scope of methods for set step information
// Deprecated.
type StepBuilder interface {
// StepName is a function to wrap a Test in new steps with Name
StepName(name string) MiddlewareRequest
}

// CreateBuilder is functions for create Test or table tests
type CreateBuilder interface {
// Create is a function for save main information about allure and start write tests
Create() MiddlewareRequest

// CreateWithStep is a function for create step and log some information inside
// Deprecated, please use CreateStep(string)
CreateWithStep() StepBuilder
// CreateStep is a function for create step inside suite for Test
CreateStep(string) MiddlewareRequest

Expand Down Expand Up @@ -239,6 +229,10 @@ type ExpectHTTPBuilder interface {
// Mark in allure as Broken
OptionalAssertResponseT(asserts ...AssertResponseT) ExpectHTTPBuilder

// EnableHardValidation is enabled hard validation,
// If one of assert was failed, test will stopped.
EnableHardValidation() ExpectHTTPBuilder

After
ControlTest
}
Expand Down
8 changes: 4 additions & 4 deletions jsonschema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func TestValidateJSONSchemaEmptySchema(t *testing.T) {
var (
tBuilder = createDefaultTest(nil)
tBuilder = createDefaultTest(&HTTPTestMaker{middleware: new(Middleware)})
)

errs := tBuilder.validateJSONSchema(nil, []byte{})
Expand All @@ -18,7 +18,7 @@ func TestValidateJSONSchemaEmptySchema(t *testing.T) {

func TestValidateJSONSchemaFromString(t *testing.T) {
var (
tBuilder = createDefaultTest(nil)
tBuilder = createDefaultTest(&HTTPTestMaker{middleware: new(Middleware)})
tempT = createAllureT(t)
)

Expand Down Expand Up @@ -57,7 +57,7 @@ func TestValidateJSONSchemaFromString(t *testing.T) {

func TestValidateJSONSchemaFromStringWithError(t *testing.T) {
var (
tBuilder = createDefaultTest(nil)
tBuilder = createDefaultTest(&HTTPTestMaker{middleware: new(Middleware)})
tempT = createAllureT(t)
)

Expand Down Expand Up @@ -105,7 +105,7 @@ func TestValidateJSONSchemaFromStringWithError(t *testing.T) {

func TestValidateJSONSchemaFromByteWithTwoError(t *testing.T) {
var (
tBuilder = createDefaultTest(nil)
tBuilder = createDefaultTest(&HTTPTestMaker{middleware: new(Middleware)})
tempT = createAllureT(t)
)

Expand Down
13 changes: 11 additions & 2 deletions test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ var (
type Test struct {
httpClient *http.Client

HardValidation bool

Name string

AllureStep *AllureStep
Expand Down Expand Up @@ -171,15 +173,15 @@ func (it *Test) execute(ctx context.Context, allureProvider allureProvider) Resu
resp, errs = it.startTest(ctx, allureProvider)
}

processTestErrors(allureProvider, errs)
it.processTestErrors(allureProvider, errs)

// Remove from base struct all asserts
it.clearFields()

return newTestResult(name, resp, errs)
}

func processTestErrors(t internalT, errs []error) {
func (it *Test) processTestErrors(t internalT, errs []error) {
if len(errs) == 0 {
return
}
Expand All @@ -202,6 +204,9 @@ func processTestErrors(t internalT, errs []error) {

if len(resErrors) == 1 {
t.Errorf("[ERROR] %v", resErrors[0])
if it.HardValidation {
t.FailNow()
}

return
}
Expand All @@ -211,6 +216,10 @@ func processTestErrors(t internalT, errs []error) {
}

t.Errorf("Test finished with %v errors", len(resErrors))

if it.HardValidation {
t.FailNow()
}
}

func (it *Test) startTestWithStep(ctx context.Context, t internalT) (*http.Response, []error) {
Expand Down

0 comments on commit 1dbb28a

Please sign in to comment.