134 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package git
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
type parseCase struct {
 | 
						|
	source   string
 | 
						|
	expected *Source
 | 
						|
}
 | 
						|
 | 
						|
func TestParseSource(t *testing.T) {
 | 
						|
	cases := []parseCase{
 | 
						|
		{
 | 
						|
			source: "github.com/micro/services/helloworld",
 | 
						|
			expected: &Source{
 | 
						|
				Repo:   "github.com/micro/services",
 | 
						|
				Folder: "helloworld",
 | 
						|
				Ref:    "latest",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			source: "github.com/micro/services/helloworld",
 | 
						|
			expected: &Source{
 | 
						|
				Repo:   "github.com/micro/services",
 | 
						|
				Folder: "helloworld",
 | 
						|
				Ref:    "latest",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			source: "github.com/micro/services/helloworld@v1.12.1",
 | 
						|
			expected: &Source{
 | 
						|
				Repo:   "github.com/micro/services",
 | 
						|
				Folder: "helloworld",
 | 
						|
				Ref:    "v1.12.1",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			source: "github.com/micro/services/helloworld@branchname",
 | 
						|
			expected: &Source{
 | 
						|
				Repo:   "github.com/micro/services",
 | 
						|
				Folder: "helloworld",
 | 
						|
				Ref:    "branchname",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			source: "github.com/crufter/reponame/helloworld@branchname",
 | 
						|
			expected: &Source{
 | 
						|
				Repo:   "github.com/crufter/reponame",
 | 
						|
				Folder: "helloworld",
 | 
						|
				Ref:    "branchname",
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for i, c := range cases {
 | 
						|
		result, err := ParseSource(c.source)
 | 
						|
		if err != nil {
 | 
						|
			t.Fatalf("Failed case %v: %v", i, err)
 | 
						|
		}
 | 
						|
		if result.Folder != c.expected.Folder {
 | 
						|
			t.Fatalf("Folder does not match for '%v', expected '%v', got '%v'", i, c.expected.Folder, result.Folder)
 | 
						|
		}
 | 
						|
		if result.Repo != c.expected.Repo {
 | 
						|
			t.Fatalf("Repo address does not match for '%v', expected '%v', got '%v'", i, c.expected.Repo, result.Repo)
 | 
						|
		}
 | 
						|
		if result.Ref != c.expected.Ref {
 | 
						|
			t.Fatalf("Ref does not match for '%v', expected '%v', got '%v'", i, c.expected.Ref, result.Ref)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
type localParseCase struct {
 | 
						|
	source     string
 | 
						|
	expected   *Source
 | 
						|
	workDir    string
 | 
						|
	pathExists bool
 | 
						|
}
 | 
						|
 | 
						|
func TestLocalParseSource(t *testing.T) {
 | 
						|
	cases := []localParseCase{
 | 
						|
		{
 | 
						|
			source: ".",
 | 
						|
			expected: &Source{
 | 
						|
				Folder: "folder2",
 | 
						|
				Ref:    "latest",
 | 
						|
			},
 | 
						|
			workDir:    "/folder1/folder2",
 | 
						|
			pathExists: true,
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for i, c := range cases {
 | 
						|
		result, err := ParseSourceLocal(c.workDir, c.source, func(s string) (bool, error) {
 | 
						|
			return c.pathExists, nil
 | 
						|
		})
 | 
						|
		if err != nil {
 | 
						|
			t.Fatalf("Failed case %v: %v", i, err)
 | 
						|
		}
 | 
						|
		if result.Folder != c.expected.Folder {
 | 
						|
			t.Fatalf("Folder does not match for '%v', expected '%v', got '%v'", i, c.expected.Folder, result.Folder)
 | 
						|
		}
 | 
						|
		if result.Repo != c.expected.Repo {
 | 
						|
			t.Fatalf("Repo address does not match for '%v', expected '%v', got '%v'", i, c.expected.Repo, result.Repo)
 | 
						|
		}
 | 
						|
		if result.Ref != c.expected.Ref {
 | 
						|
			t.Fatalf("Ref does not match for '%v', expected '%v', got '%v'", i, c.expected.Ref, result.Ref)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
type nameCase struct {
 | 
						|
	fileContent string
 | 
						|
	expected    string
 | 
						|
}
 | 
						|
 | 
						|
func TestServiceNameExtract(t *testing.T) {
 | 
						|
	cases := []nameCase{
 | 
						|
		{
 | 
						|
			fileContent: `func main() {
 | 
						|
			// New Service
 | 
						|
			service := micro.NewService(
 | 
						|
				micro.Name("go.micro.service.helloworld"),
 | 
						|
				micro.Version("latest"),
 | 
						|
			)`,
 | 
						|
			expected: "go.micro.service.helloworld",
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for i, c := range cases {
 | 
						|
		result := extractServiceName([]byte(c.fileContent))
 | 
						|
		if result != c.expected {
 | 
						|
			t.Fatalf("Case %v, expected: %v, got: %v", i, c.expected, result)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |