package audit

import (
	"bytes"
	"testing"

	"github.com/hashicorp/vault/logical"
)

func TestFormatJSON_formatRequest(t *testing.T) {
	cases := map[string]struct {
		Auth   *logical.Auth
		Req    *logical.Request
		Result string
	}{
		"auth, request": {
			&logical.Auth{ClientToken: "foo", Policies: []string{"root"}},
			&logical.Request{
				Operation: logical.WriteOperation,
				Path:      "/foo",
			},
			testFormatJSONReqBasicStr,
		},
	}

	for name, tc := range cases {
		var buf bytes.Buffer
		var format FormatJSON
		if err := format.FormatRequest(&buf, tc.Auth, tc.Req); err != nil {
			t.Fatalf("bad: %s\nerr: %s", name, err)
		}

		if buf.String() != tc.Result {
			t.Fatalf(
				"bad: %s\nResult:\n\n%s\n\nExpected:\n\n%s",
				name, buf.String(), tc.Result)
		}
	}
}

const testFormatJSONReqBasicStr = `{"type":"request","auth":{"policies":["root"],"metadata":null},"request":{"operation":"write","path":"/foo","data":null}}
`
