// Copyright Earl Warren // Copyright Loïc Dachary // SPDX-License-Identifier: MIT package f3 import ( "path/filepath" "strings" "testing" "github.com/santhosh-tekuri/jsonschema/v6" "github.com/stretchr/testify/assert" ) func TestStoreLoad(t *testing.T) { tmpDir := t.TempDir() type S struct { A int B string } original := S{A: 1, B: "B"} p := filepath.Join(tmpDir, "s.json") assert.NoError(t, Store(p, original)) var loaded S assert.NoError(t, Load(p, &loaded, false)) assert.EqualValues(t, original, loaded) } func TestF3_CI(t *testing.T) { var ci CI err := Load("file_format_testdata/ci/good.json", &ci, true) assert.NoError(t, err) err = Load("file_format_testdata/ci/bad.json", &ci, true) assert.ErrorContains(t, err, "'/index': value must be one of") } func TestF3_User(t *testing.T) { var user User err := Load("file_format_testdata/user/good.json", &user, true) assert.NoError(t, err) err = Load("file_format_testdata/user/bad.json", &user, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_Organization(t *testing.T) { var organization Organization err := Load("file_format_testdata/organization/good.json", &organization, true) assert.NoError(t, err) err = Load("file_format_testdata/organization/bad.json", &organization, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_Project(t *testing.T) { var project Project err := Load("file_format_testdata/project/good.json", &project, true) assert.NoError(t, err) err = Load("file_format_testdata/project/bad.json", &project, true) assert.ErrorContains(t, err, "'/stars': got string, want number") } func TestF3_Issue(t *testing.T) { var issue Issue err := Load("file_format_testdata/issue/good.json", &issue, true) assert.NoError(t, err) err = Load("file_format_testdata/issue/bad.json", &issue, true) assert.ErrorContains(t, err, "missing property 'index'") } func TestF3_PullRequest(t *testing.T) { var pullRequest PullRequest err := Load("file_format_testdata/pullrequest/good.json", &pullRequest, true) assert.NoError(t, err) err = Load("file_format_testdata/pullrequest/bad.json", &pullRequest, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_Release(t *testing.T) { var release Release err := Load("file_format_testdata/release/good.json", &release, true) assert.NoError(t, err) err = Load("file_format_testdata/release/bad.json", &release, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_ReleaseAsset(t *testing.T) { var releaseAsset ReleaseAsset err := Load("file_format_testdata/releaseasset/good.json", &releaseAsset, true) assert.NoError(t, err) err = Load("file_format_testdata/releaseasset/bad.json", &releaseAsset, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_Comment(t *testing.T) { var comment Comment err := Load("file_format_testdata/comment/good.json", &comment, true) assert.NoError(t, err) err = Load("file_format_testdata/comment/bad.json", &comment, true) assert.ErrorContains(t, err, "'/created': 'AAAAAAAAA' is not valid date-time") } func TestF3_Label(t *testing.T) { var label Label err := Load("file_format_testdata/label/good.json", &label, true) assert.NoError(t, err) err = Load("file_format_testdata/label/bad.json", &label, true) assert.ErrorContains(t, err, "'/exclusive': got string, want boolean") } func TestF3_Milestone(t *testing.T) { var milestone Milestone err := Load("file_format_testdata/milestone/good.json", &milestone, true) assert.NoError(t, err) err = Load("file_format_testdata/milestone/bad.json", &milestone, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_Review(t *testing.T) { var review Review err := Load("file_format_testdata/review/good.json", &review, true) assert.NoError(t, err) err = Load("file_format_testdata/review/bad.json", &review, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_Reaction(t *testing.T) { var reaction Reaction err := Load("file_format_testdata/reaction/good.json", &reaction, true) assert.NoError(t, err) err = Load("file_format_testdata/reaction/bad.json", &reaction, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_Repository(t *testing.T) { var repository Repository err := Load("file_format_testdata/repository/good.json", &repository, true) assert.NoError(t, err) err = Load("file_format_testdata/repository/bad.json", &repository, true) assert.ErrorContains(t, err, "missing property 'name'") } func TestF3_ReviewComment(t *testing.T) { var reviewComment ReviewComment err := Load("file_format_testdata/reviewcomment/good.json", &reviewComment, true) assert.NoError(t, err) err = Load("file_format_testdata/reviewcomment/bad.json", &reviewComment, true) assert.ErrorContains(t, err, "missing properties 'index'") } func TestF3_Topic(t *testing.T) { var topic Topic err := Load("file_format_testdata/topic.json", &topic, true) assert.NoError(t, err) } func TestF3_ValidationFail(t *testing.T) { var issue Issue err := Load("file_format_testdata/issue/bad.json", &issue, true) if _, ok := err.(*jsonschema.ValidationError); ok { errors := strings.Split(err.(*jsonschema.ValidationError).GoString(), "\n") assert.Contains(t, errors[1], "missing property") } else { t.Fatalf("got: type %T with value %s, want: *jsonschema.ValidationError", err, err) } }