Skip to content

Commit

Permalink
simplify load
Browse files Browse the repository at this point in the history
  • Loading branch information
Reuven committed Feb 1, 2024
1 parent 16197d0 commit 3ab0880
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 100 deletions.
4 changes: 2 additions & 2 deletions load/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ type Loader interface {
LoadFromStdin() (*openapi3.T, error)
}

// From is a convenience function that opens an OpenAPI spec from a URL or a local path based on the format of the path parameter
func From(loader Loader, source *Source) (*openapi3.T, error) {
// from is a convenience function that opens an OpenAPI spec from a URL or a local path based on the format of the path parameter
func from(loader Loader, source *Source) (*openapi3.T, error) {

switch source.Type {
case SourceTypeStdin:
Expand Down
96 changes: 0 additions & 96 deletions load/load_test.go

This file was deleted.

21 changes: 21 additions & 0 deletions load/mock_loader_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package load_test

import (
"net/url"

"github.com/getkin/kin-openapi/openapi3"
)

func (mockLoader MockLoader) LoadFromFile(path string) (*openapi3.T, error) {
return openapi3.NewLoader().LoadFromFile(path)
}

func (mockLoader MockLoader) LoadFromURI(location *url.URL) (*openapi3.T, error) {
return openapi3.NewLoader().LoadFromFile(".." + location.Path)
}

func (mockLoader MockLoader) LoadFromStdin() (*openapi3.T, error) {
return openapi3.NewLoader().LoadFromStdin()
}

type MockLoader struct{}
2 changes: 1 addition & 1 deletion load/spec_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func getVersion(spec *openapi3.T) string {

// LoadSpecInfo creates a SpecInfo from a local file path, a URL, or stdin
func LoadSpecInfo(loader Loader, source *Source) (*SpecInfo, error) {
s, err := From(loader, source)
s, err := from(loader, source)
if err != nil {
return nil, err
}
Expand Down
103 changes: 102 additions & 1 deletion load/spec_info_test.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,118 @@
package load_test

import (
"log"
"os"
"testing"

"github.com/stretchr/testify/require"
"github.com/tufin/oasdiff/load"
)

func TestSpecInfo(t *testing.T) {
func TestSpecInfo_File(t *testing.T) {
_, err := load.LoadSpecInfo(MockLoader{}, load.NewSource("../data/openapi-test1.yaml"))
require.NoError(t, err)
}

func TestLoadInfo_FileWindows(t *testing.T) {
_, err := load.LoadSpecInfo(MockLoader{}, load.NewSource(`C:\dev\OpenApi\spec2.yaml`))
require.Condition(t, func() (success bool) {
return err.Error() == "open C:\\dev\\OpenApi\\spec2.yaml: no such file or directory" ||
err.Error() == "open C:/dev/OpenApi/spec2.yaml: The system cannot find the path specified."
})
}

func TestLoadInfo_URI(t *testing.T) {
_, err := load.LoadSpecInfo(MockLoader{}, load.NewSource("https://localhost/data/openapi-test1.yaml"))
require.NoError(t, err)
}

func TestLoadInfo_UriInvalid(t *testing.T) {
_, err := load.LoadSpecInfo(MockLoader{}, load.NewSource("http://localhost/null"))
require.Condition(t, func() (success bool) {
return err.Error() == "open ../null: no such file or directory" ||
err.Error() == "open ../null: The system cannot find the file specified."
})
}

func TestLoadInfo_UriBadScheme(t *testing.T) {
_, err := load.LoadSpecInfo(MockLoader{}, load.NewSource("ftp://localhost/null"))
require.Condition(t, func() (success bool) {
return err.Error() == "open ftp://localhost/null: no such file or directory" ||
err.Error() == "open ftp://localhost/null: The filename, directory name, or volume label syntax is incorrect."
})
}

func TestLoadInfo_Stdin(t *testing.T) {
content := []byte(`openapi: 3.0.1
info:
title: Test API
version: v1
paths:
/partner-api/test/some-method:
get:
responses:
"200":
description: Success
`)

tmpfile, err := os.CreateTemp("", "example")
if err != nil {
log.Fatal(err)
}

defer os.Remove(tmpfile.Name()) // clean up

if _, err := tmpfile.Write(content); err != nil {
log.Fatal(err)
}

if _, err := tmpfile.Seek(0, 0); err != nil {
log.Fatal(err)
}

oldStdin := os.Stdin
defer func() { os.Stdin = oldStdin }() // Restore original Stdin

os.Stdin = tmpfile
_, err = load.LoadSpecInfo(MockLoader{}, load.NewSource("-"))
require.NoError(t, err)
}

func TestLoadInfo_NoVersion(t *testing.T) {
content := []byte(`openapi: 3.0.1
paths:
/partner-api/test/some-method:
get:
responses:
"200":
description: Success
`)

tmpfile, err := os.CreateTemp("", "example")
if err != nil {
log.Fatal(err)
}

defer os.Remove(tmpfile.Name()) // clean up

if _, err := tmpfile.Write(content); err != nil {
log.Fatal(err)
}

if _, err := tmpfile.Seek(0, 0); err != nil {
log.Fatal(err)
}

oldStdin := os.Stdin
defer func() { os.Stdin = oldStdin }() // Restore original Stdin

os.Stdin = tmpfile
specInfo, err := load.LoadSpecInfo(MockLoader{}, load.NewSource("-"))
require.NoError(t, err)
require.Empty(t, specInfo.Version)
}

func TestSpecInfo_GlobOK(t *testing.T) {
_, err := load.FromGlob(MockLoader{}, "../data/*.yaml")
require.NoError(t, err)
Expand Down

0 comments on commit 3ab0880

Please sign in to comment.