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: "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)
 | |
| 		}
 | |
| 	}
 | |
| }
 |