Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions examples/suite_demo/parameters_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,29 @@ func (s *ParametersDemoSuite) TestAddParameterToNestedStep(t provider.T) {
})
}

func (s *ParametersDemoSuite) TestSetParameterMode(t provider.T) {
t.Epic("Demo")
t.Feature("Parameters")
t.Title("Set Parameters mode")
t.Description(`
Step A will contain following parameters:
Param1 = Val1
Param2 = Val2 (hidden)
Param3 = Val3 (masked)`)

t.Tags("Steps", "Mode", "Parameters")

step := allure.NewSimpleStep("Step A")

// with step.WithParameters(s) function
step.WithParameters(allure.NewParameter("Param1", "Val1"))
step.WithParameters(allure.NewParameter("Param2", "Val2").Hidden())
step.WithParameters(allure.NewParameter("Param3", "Val3").Masked())

// don't forget register your step :)
t.Step(step)
}

func TestParameters(t *testing.T) {
t.Parallel()
suite.RunSuite(t, new(ParametersDemoSuite))
Expand Down
29 changes: 29 additions & 0 deletions pkg/allure/parameter.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,18 @@ import (
// (for example - request host or server address)
type Parameter struct {
Name string `json:"name"`
Mode Mode `json:"mode,omitempty"`
Value interface{} `json:"value"`
}

// Parameter's Mode constants
type Mode string

const (
Hidden Mode = "hidden"
Masked Mode = "masked"
)

// NewParameter Constructor. Builds and returns a new `Parameter` object,
// using `name` as the parameter name and `value`, as the value.
func NewParameter(name string, value ...interface{}) *Parameter {
Expand Down Expand Up @@ -59,6 +68,22 @@ func (p *Parameter) GetValue() string {
return unquoted
}

// Hidden marks the parameter as hidden in the Allure report.
// Use this for internal metadata that should exist in the result file
// but remain invisible to the reader in the Allure UI.
func (p *Parameter) Hidden() *Parameter {
p.Mode = Hidden
return p
}

// Masked marks the parameter as masked in the Allure report.
// Use this for sensitive data like passwords, API keys, or PII to ensure
// the values are obscured in the UI and report exports.
func (p *Parameter) Masked() *Parameter {
p.Mode = Masked
return p
}

// TODO: remove this in v2
//
// See explanation in [Parameter.UnmarshalJSON]
Expand Down Expand Up @@ -171,6 +196,7 @@ func (p *Parameter) UnmarshalJSON(data []byte) error {
var aux struct {
Name string `json:"name"`
Value parameterValue `json:"value"`
Mode Mode `json:"mode"`
}

if err := json.Unmarshal(data, &aux); err != nil {
Expand All @@ -180,6 +206,7 @@ func (p *Parameter) UnmarshalJSON(data []byte) error {
*p = Parameter{
Name: aux.Name,
Value: aux.Value.Inner(),
Mode: aux.Mode,
}

return nil
Expand Down Expand Up @@ -210,9 +237,11 @@ func (p *Parameter) MarshalJSON() ([]byte, error) {

aux := struct {
Name string `json:"name"`
Mode Mode `json:"mode,omitempty"`
Value json.RawMessage `json:"value"`
}{
Name: p.Name,
Mode: p.Mode,
Value: raw,
}

Expand Down
23 changes: 23 additions & 0 deletions pkg/allure/parameter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,26 @@ func TestParameterUnmarshal(t *testing.T) {
require.Equal(t, "map[a:[1 true 3.14]]", param.GetValue())
})
}

func TestParameterMode(t *testing.T) {
const paramName = "paramName"
paramValue := "paramValue"

param := NewParameter(paramName, paramValue)
require.NotNil(t, param)
require.Equal(t, paramName, param.Name)
require.Equal(t, string(paramValue), param.GetValue())
require.Empty(t, param.Mode)

param = NewParameter(paramName, paramValue).Hidden()
require.NotNil(t, param)
require.Equal(t, paramName, param.Name)
require.Equal(t, string(paramValue), param.GetValue())
require.Equal(t, Hidden, param.Mode)

param = NewParameter(paramName, paramValue).Masked()
require.NotNil(t, param)
require.Equal(t, paramName, param.Name)
require.Equal(t, string(paramValue), param.GetValue())
require.Equal(t, Masked, param.Mode)
}
4 changes: 2 additions & 2 deletions pkg/allure/step_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ func TestNewStep(t *testing.T) {
stepStart := time.Now().UnixNano() / int64(time.Millisecond)
stepStop := time.Now().UnixNano()/int64(time.Millisecond) + 1
parameters := []*Parameter{
{"Param1", []byte("val1")},
{"Param2", []byte("val2")},
{"Param1", "", []byte("val1")},
{"Param2", "", []byte("val2")},
}
step := NewStep(stepName, stepStatus, stepStart, stepStop, parameters)
assert.Equal(t, stepName, step.Name)
Expand Down