Skip to content

Commit

Permalink
Merge pull request #17 from apalashkin/issue-12
Browse files Browse the repository at this point in the history
Issue #12: add JSONContains assert and Regexp wrapper
  • Loading branch information
koodeex authored Jul 20, 2022
2 parents e0fd6a9 + 3aca5d1 commit 1fbbf8d
Show file tree
Hide file tree
Showing 14 changed files with 845 additions and 0 deletions.
4 changes: 4 additions & 0 deletions pkg/framework/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,12 @@ allure-go provides implementation of most usable [testify](https://github.com/st
| `NotEmpty(object interface{}, msgAndArgs ...interface{})` |
| `WithinDuration(expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{})` |
| `JSONEq(expected, actual string, msgAndArgs ...interface{})` |
| `JSONContains(expected, actual string, msgAndArgs ...interface{})` |
| `Subset(list, subset interface{}, msgAndArgs ...interface{})` |
| `IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{})` |
| `True(value bool, msgAndArgs ...interface{})` |
| `False(value bool, msgAndArgs ...interface{})` |
| `Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{})` |

:information_desk_person: **NOTE:** allure-go supports assert/require separation. User `T.Assert()`/`T.Require()` to get asserts you need.

Expand Down Expand Up @@ -234,10 +236,12 @@ Also, allure-go supports assert/require functionality that not attached to the `
| `NotEmpty(t ProviderT, object interface{}, msgAndArgs ...interface{})` |
| `WithinDuration(t ProviderT, expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{})` |
| `JSONEq(t ProviderT, expected, actual string, msgAndArgs ...interface{})` |
| `JSONContains(t ProviderT, expected, actual string, msgAndArgs ...interface{})` |
| `Subset(t ProviderT, list, subset interface{}, msgAndArgs ...interface{})` |
| `IsType(t ProviderT, expectedType interface{}, object interface{}, msgAndArgs ...interface{})` |
| `True(t ProviderT, value bool, msgAndArgs ...interface{})` |
| `False(t ProviderT, value bool, msgAndArgs ...interface{})` |
| `Regexp(t ProviderT, rx interface{}, str interface{}, msgAndArgs ...interface{})` |

:information_desk_person: **NOTE:** `ProviderT` interface:

Expand Down
10 changes: 10 additions & 0 deletions pkg/framework/asserts_wrapper/asserts/asserts.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,11 @@ func JSONEq(t ProviderT, expected, actual string, msgAndArgs ...interface{}) {
wrapper.NewAsserts(t).JSONEq(t, expected, actual, msgAndArgs...)
}

// JSONContains ...
func JSONContains(t ProviderT, expected, actual string, msgAndArgs ...interface{}) {
wrapper.NewAsserts(t).JSONContains(t, expected, actual, msgAndArgs...)
}

// Subset ...
func Subset(t ProviderT, list, subset interface{}, msgAndArgs ...interface{}) {
wrapper.NewAsserts(t).Subset(t, list, subset, msgAndArgs...)
Expand All @@ -122,3 +127,8 @@ func True(t ProviderT, value bool, msgAndArgs ...interface{}) {
func False(t ProviderT, value bool, msgAndArgs ...interface{}) {
wrapper.NewAsserts(t).False(t, value, msgAndArgs...)
}

// Regexp ...
func Regexp(t ProviderT, rx interface{}, str interface{}, msgAndArgs ...interface{}) {
wrapper.NewAsserts(t).Regexp(t, rx, str, msgAndArgs...)
}
104 changes: 104 additions & 0 deletions pkg/framework/asserts_wrapper/asserts/asserts_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -846,6 +846,58 @@ func TestAssertJSONEq_Fail(t *testing.T) {
require.Equal(t, "\n%s", mockT.errorFString)
}

func TestAssertJSONContains_Success(t *testing.T) {
mockT := newMock()
exp := `{"key1": 123, "key3": ["foo", "bar"]}`
actual := `{"key1": 123, "key2": "foobar", "key3": ["foo", "bar"]}`

JSONContains(mockT, exp, actual)

steps := mockT.steps
require.Len(t, steps, 1)
require.Equal(t, "ASSERT: JSON Contains", steps[0].Name)
require.Equal(t, allure.Passed, steps[0].Status)

params := steps[0].Parameters
require.Len(t, params, 2)

require.Equal(t, "Expected", params[0].Name)
require.Equal(t, exp, params[0].Value)

require.Equal(t, "Actual", params[1].Name)
require.Equal(t, actual, params[1].Value)

require.False(t, mockT.errorF)
require.False(t, mockT.failNow)
require.Empty(t, mockT.errorFString)
}

func TestAssertJSONContains_Fail(t *testing.T) {
mockT := newMock()
exp := `{"key1": 321, "key3": ["foobar", "bar"]}`
actual := `{"key1": 123, "key2": "foobar", "key3": ["foo", "bar"]}`

JSONContains(mockT, exp, actual)

steps := mockT.steps
require.Len(t, steps, 1)
require.Equal(t, "ASSERT: JSON Contains", steps[0].Name)
require.Equal(t, allure.Failed, steps[0].Status)

params := steps[0].Parameters
require.Len(t, params, 2)

require.Equal(t, "Expected", params[0].Name)
require.Equal(t, exp, params[0].Value)

require.Equal(t, "Actual", params[1].Name)
require.Equal(t, actual, params[1].Value)

require.True(t, mockT.errorF)
require.False(t, mockT.failNow)
require.Equal(t, "\n%s", mockT.errorFString)
}

func TestAssertSubset_Success(t *testing.T) {
mockT := newMock()

Expand Down Expand Up @@ -1040,3 +1092,55 @@ func TestAssertFalse_Fail(t *testing.T) {
require.False(t, mockT.failNow)
require.Equal(t, "\n%s", mockT.errorFString)
}

func TestAssertRegexp_Success(t *testing.T) {
mockT := newMock()

rx := `^start`
str := "start of the line"
Regexp(mockT, rx, str)

steps := mockT.steps
require.Len(t, steps, 1)
require.Equal(t, "ASSERT: Regexp", steps[0].Name)
require.Equal(t, allure.Passed, steps[0].Status)

params := steps[0].Parameters
require.Len(t, params, 2)

require.Equal(t, "Expected", params[0].Name)
require.Equal(t, fmt.Sprintf("%#v", rx), params[0].Value)

require.Equal(t, "Actual", params[1].Name)
require.Equal(t, fmt.Sprintf("%#v", str), params[1].Value)

require.False(t, mockT.errorF)
require.False(t, mockT.failNow)
require.Empty(t, mockT.errorFString)
}

func TestAssertRegexp_Fail(t *testing.T) {
mockT := newMock()

rx := `^end`
str := "start of the line"
Regexp(mockT, rx, str)

steps := mockT.steps
require.Len(t, steps, 1)
require.Equal(t, "ASSERT: Regexp", steps[0].Name)
require.Equal(t, allure.Failed, steps[0].Status)

params := steps[0].Parameters
require.Len(t, params, 2)

require.Equal(t, "Expected", params[0].Name)
require.Equal(t, fmt.Sprintf("%#v", rx), params[0].Value)

require.Equal(t, "Actual", params[1].Name)
require.Equal(t, fmt.Sprintf("%#v", str), params[1].Value)

require.True(t, mockT.errorF)
require.False(t, mockT.failNow)
require.Equal(t, "\n%s", mockT.errorFString)
}
10 changes: 10 additions & 0 deletions pkg/framework/asserts_wrapper/helper/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,11 @@ func (a *a) JSONEq(expected, actual string, msgAndArgs ...interface{}) {
a.asserts.JSONEq(a.t, expected, actual, msgAndArgs...)
}

// JSONContains ...
func (a *a) JSONContains(expected, actual string, msgAndArgs ...interface{}) {
a.asserts.JSONContains(a.t, expected, actual, msgAndArgs...)
}

// Subset ...
func (a *a) Subset(list, subset interface{}, msgAndArgs ...interface{}) {
a.asserts.Subset(a.t, list, subset, msgAndArgs...)
Expand All @@ -120,3 +125,8 @@ func (a *a) True(value bool, msgAndArgs ...interface{}) {
func (a *a) False(value bool, msgAndArgs ...interface{}) {
a.asserts.False(a.t, value, msgAndArgs...)
}

// Regexp ...
func (a *a) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) {
a.asserts.Regexp(a.t, rx, str, msgAndArgs...)
}
Loading

0 comments on commit 1fbbf8d

Please sign in to comment.