|
1 | 1 | package comment |
2 | 2 |
|
3 | 3 | import ( |
4 | | - _ "embed" |
| 4 | + "errors" |
| 5 | + "strings" |
| 6 | + "testing" |
| 7 | + |
| 8 | + configv1alpha1 "github.com/padok-team/burrito/api/v1alpha1" |
| 9 | + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
5 | 10 | ) |
6 | 11 |
|
7 | | -// func TestDefaultComment_Generate(t *testing.T) { |
8 | | -// type fields struct { |
9 | | -// layers []configv1alpha1.TerraformLayer |
10 | | -// storage storage.Storage |
11 | | -// } |
12 | | -// tests := []struct { |
13 | | -// name string |
14 | | -// fields fields |
15 | | -// want string |
16 | | -// wantErr bool |
17 | | -// }{ |
18 | | -// // TODO: Add test cases. |
19 | | -// } |
20 | | -// for _, tt := range tests { |
21 | | -// t.Run(tt.name, func(t *testing.T) { |
22 | | -// c := &DefaultComment{ |
23 | | -// layers: tt.fields.layers, |
24 | | -// storage: tt.fields.storage, |
25 | | -// } |
26 | | -// got, err := c.Generate() |
27 | | -// if (err != nil) != tt.wantErr { |
28 | | -// t.Errorf("DefaultComment.Generate() error = %v, wantErr %v", err, tt.wantErr) |
29 | | -// return |
30 | | -// } |
31 | | -// if got != tt.want { |
32 | | -// t.Errorf("DefaultComment.Generate() = %v, want %v", got, tt.want) |
33 | | -// } |
34 | | -// }) |
35 | | -// } |
36 | | -// } |
| 12 | +type fakeDatastore struct { |
| 13 | + plans map[string][]byte |
| 14 | + err error |
| 15 | + errByFormat map[string]error |
| 16 | +} |
| 17 | + |
| 18 | +func (f *fakeDatastore) GetPlan(namespace string, layer string, run string, attempt string, format string) ([]byte, error) { |
| 19 | + if f.err != nil { |
| 20 | + return nil, f.err |
| 21 | + } |
| 22 | + if err, ok := f.errByFormat[format]; ok { |
| 23 | + return nil, err |
| 24 | + } |
| 25 | + return f.plans[format], nil |
| 26 | +} |
| 27 | + |
| 28 | +func (f *fakeDatastore) PutPlan(namespace string, layer string, run string, attempt string, format string, content []byte) error { |
| 29 | + return nil |
| 30 | +} |
| 31 | + |
| 32 | +func (f *fakeDatastore) GetLogs(namespace string, layer string, run string, attempt string) ([]string, error) { |
| 33 | + return nil, nil |
| 34 | +} |
| 35 | + |
| 36 | +func (f *fakeDatastore) PutLogs(namespace string, layer string, run string, attempt string, content []byte) error { |
| 37 | + return nil |
| 38 | +} |
| 39 | + |
| 40 | +func (f *fakeDatastore) PutGitBundle(namespace string, name string, ref string, revision string, bundle []byte) error { |
| 41 | + return nil |
| 42 | +} |
| 43 | + |
| 44 | +func (f *fakeDatastore) CheckGitBundle(namespace string, name string, ref string, revision string) (bool, error) { |
| 45 | + return false, nil |
| 46 | +} |
| 47 | + |
| 48 | +func (f *fakeDatastore) GetGitBundle(namespace string, name string, ref string, revision string) ([]byte, error) { |
| 49 | + return nil, nil |
| 50 | +} |
| 51 | + |
| 52 | +func TestDefaultCommentGenerate(t *testing.T) { |
| 53 | + comment := NewDefaultComment([]configv1alpha1.TerraformLayer{ |
| 54 | + { |
| 55 | + ObjectMeta: metav1.ObjectMeta{ |
| 56 | + Name: "layer-a", |
| 57 | + Namespace: "default", |
| 58 | + }, |
| 59 | + Spec: configv1alpha1.TerraformLayerSpec{ |
| 60 | + Path: "terraform/", |
| 61 | + }, |
| 62 | + Status: configv1alpha1.TerraformLayerStatus{ |
| 63 | + LastRun: configv1alpha1.TerraformLayerRun{ |
| 64 | + Name: "run-a", |
| 65 | + }, |
| 66 | + }, |
| 67 | + }, |
| 68 | + }, &fakeDatastore{ |
| 69 | + plans: map[string][]byte{ |
| 70 | + "pretty": []byte("pretty plan"), |
| 71 | + "short": []byte("+ create"), |
| 72 | + }, |
| 73 | + }) |
| 74 | + |
| 75 | + got, err := comment.Generate("abc123") |
| 76 | + if err != nil { |
| 77 | + t.Fatalf("Generate returned error: %v", err) |
| 78 | + } |
| 79 | + |
| 80 | + for _, expected := range []string{"Burrito Report", "layer-a", "terraform/", "+ create", "pretty plan", "abc123"} { |
| 81 | + if !strings.Contains(got, expected) { |
| 82 | + t.Fatalf("expected generated comment to contain %q, got:\n%s", expected, got) |
| 83 | + } |
| 84 | + } |
| 85 | +} |
| 86 | + |
| 87 | +func TestDefaultCommentGenerateReturnsDatastoreError(t *testing.T) { |
| 88 | + expectedErr := errors.New("datastore unavailable") |
| 89 | + comment := NewDefaultComment([]configv1alpha1.TerraformLayer{{}}, &fakeDatastore{err: expectedErr}) |
| 90 | + |
| 91 | + _, err := comment.Generate("abc123") |
| 92 | + if !errors.Is(err, expectedErr) { |
| 93 | + t.Fatalf("expected %v, got %v", expectedErr, err) |
| 94 | + } |
| 95 | +} |
| 96 | + |
| 97 | +func TestDefaultCommentGenerateReturnsShortPlanError(t *testing.T) { |
| 98 | + expectedErr := errors.New("short plan unavailable") |
| 99 | + comment := NewDefaultComment([]configv1alpha1.TerraformLayer{{}}, &fakeDatastore{ |
| 100 | + plans: map[string][]byte{ |
| 101 | + "pretty": []byte("pretty plan"), |
| 102 | + }, |
| 103 | + errByFormat: map[string]error{ |
| 104 | + "short": expectedErr, |
| 105 | + }, |
| 106 | + }) |
| 107 | + |
| 108 | + _, err := comment.Generate("abc123") |
| 109 | + if !errors.Is(err, expectedErr) { |
| 110 | + t.Fatalf("expected %v, got %v", expectedErr, err) |
| 111 | + } |
| 112 | +} |
| 113 | + |
| 114 | +func TestManagedMarkerHelpers(t *testing.T) { |
| 115 | + body := "hello" |
| 116 | + withMarker := WithManagedMarker(body) |
| 117 | + if !HasManagedMarker(withMarker) { |
| 118 | + t.Fatalf("expected generated body to contain managed marker") |
| 119 | + } |
| 120 | + if got := WithManagedMarker(withMarker); got != withMarker { |
| 121 | + t.Fatalf("expected WithManagedMarker to be idempotent") |
| 122 | + } |
| 123 | + if HasManagedMarker(body) { |
| 124 | + t.Fatalf("did not expect unmanaged body to contain marker") |
| 125 | + } |
| 126 | +} |
| 127 | + |
| 128 | +func TestNewInitialComment(t *testing.T) { |
| 129 | + if NewInitialComment() == nil { |
| 130 | + t.Fatalf("expected NewInitialComment to return a comment") |
| 131 | + } |
| 132 | +} |
0 commit comments