Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit ceaa12d

Browse files
committedOct 19, 2022
Support multiple storage implementations in tests
1 parent 86e7b3e commit ceaa12d

File tree

4 files changed

+406
-291
lines changed

4 files changed

+406
-291
lines changed
 

‎cli/remove_test.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package cli_test
33
import (
44
"bytes"
55
"fmt"
6+
"os"
7+
"path/filepath"
68
"testing"
79

810
"github.com/stretchr/testify/require"
@@ -45,7 +47,7 @@ func TestRemove(t *testing.T) {
4547
{
4648
name: "RemoveOne",
4749
extension: testutil.Extensions[0],
48-
version: "a",
50+
version: testutil.Extensions[0].LatestVersion,
4951
},
5052
{
5153
name: "All",
@@ -67,19 +69,19 @@ func TestRemove(t *testing.T) {
6769
error: "cannot specify both",
6870
extension: testutil.Extensions[0],
6971
all: true,
70-
version: "a",
72+
version: testutil.Extensions[0].LatestVersion,
7173
},
7274
{
7375
name: "NoVersion",
7476
error: "does not exist",
7577
extension: testutil.Extensions[0],
76-
version: "d",
78+
version: "does-not-exist",
7779
},
7880
{
7981
name: "NoVersions",
8082
error: "does not exist",
8183
extension: testutil.Extensions[1],
82-
version: "a",
84+
version: testutil.Extensions[1].LatestVersion,
8385
},
8486
{
8587
name: "AllNoVersions",
@@ -96,9 +98,13 @@ func TestRemove(t *testing.T) {
9698

9799
extdir := t.TempDir()
98100
ext := testutil.Extensions[0]
99-
testutil.AddExtension(t, ext, extdir, "a")
100-
testutil.AddExtension(t, ext, extdir, "b")
101-
testutil.AddExtension(t, ext, extdir, "c")
101+
for _, version := range ext.Versions {
102+
manifestPath := filepath.Join(extdir, ext.Publisher, ext.Name, version, "extension.vsixmanifest")
103+
err := os.MkdirAll(filepath.Dir(manifestPath), 0o755)
104+
require.NoError(t, err)
105+
err = os.WriteFile(manifestPath, testutil.ConvertExtensionToManifestBytes(t, ext, version), 0o644)
106+
require.NoError(t, err)
107+
}
102108

103109
id := fmt.Sprintf("%s.%s", test.extension.Publisher, test.extension.Name)
104110
if test.version != "" {
@@ -123,10 +129,10 @@ func TestRemove(t *testing.T) {
123129
} else {
124130
require.NoError(t, err)
125131
if test.all {
126-
require.Contains(t, output, "Removed 3 versions")
127-
require.Contains(t, output, " - a")
128-
require.Contains(t, output, " - b")
129-
require.Contains(t, output, " - c")
132+
require.Contains(t, output, fmt.Sprintf("Removed %d versions", len(test.extension.Versions)))
133+
for _, version := range test.extension.Versions {
134+
require.Contains(t, output, fmt.Sprintf(" - %s", version))
135+
}
130136
} else {
131137
require.Contains(t, output, fmt.Sprintf("Removed %s", test.version))
132138
}

‎storage/local_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package storage_test
2+
3+
import (
4+
"os"
5+
"path/filepath"
6+
"testing"
7+
8+
"github.com/stretchr/testify/require"
9+
10+
"cdr.dev/slog"
11+
"cdr.dev/slog/sloggers/slogtest"
12+
"github.com/coder/code-marketplace/storage"
13+
)
14+
15+
func localFactory(t *testing.T) testStorage {
16+
extdir := t.TempDir()
17+
logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}).Leveled(slog.LevelDebug)
18+
s, err := storage.NewLocalStorage(extdir, logger)
19+
require.NoError(t, err)
20+
return testStorage{
21+
storage: s,
22+
write: func(content []byte, elem ...string) {
23+
dest := filepath.Join(extdir, filepath.Join(elem...))
24+
err := os.MkdirAll(filepath.Dir(dest), 0o755)
25+
require.NoError(t, err)
26+
err = os.WriteFile(dest, content, 0o644)
27+
require.NoError(t, err)
28+
},
29+
exists: func(elem ...string) bool {
30+
_, err := os.Stat(filepath.Join(extdir, filepath.Join(elem...)))
31+
return err == nil
32+
},
33+
}
34+
}

‎storage/storage_test.go

Lines changed: 352 additions & 256 deletions
Large diffs are not rendered by default.

‎testutil/extensions.go

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ import (
55
"bytes"
66
"encoding/json"
77
"encoding/xml"
8-
"fmt"
9-
"os"
10-
"path/filepath"
118
"testing"
129

1310
"github.com/stretchr/testify/require"
@@ -124,28 +121,10 @@ func ConvertExtensionToManifest(ext Extension, version string) *storage.VSIXMani
124121
}
125122
}
126123

127-
// AddExtension adds the provided test extension to the provided directory.
128-
func AddExtension(t *testing.T, ext Extension, extdir, version string) *storage.VSIXManifest {
129-
dir := filepath.Join(extdir, ext.Publisher, ext.Name, version)
130-
err := os.MkdirAll(dir, 0o755)
124+
func ConvertExtensionToManifestBytes(t *testing.T, ext Extension, version string) []byte {
125+
manifestBytes, err := xml.Marshal(ConvertExtensionToManifest(ext, version))
131126
require.NoError(t, err)
132-
133-
manifest := ConvertExtensionToManifest(ext, version)
134-
rawManifest, err := xml.Marshal(manifest)
135-
require.NoError(t, err)
136-
137-
err = os.WriteFile(filepath.Join(dir, "extension.vsixmanifest"), rawManifest, 0o644)
138-
require.NoError(t, err)
139-
140-
// The storage interface should add the extension asset when it reads the
141-
// manifest since it is not on the actual manifest on disk.
142-
manifest.Assets.Asset = append(manifest.Assets.Asset, storage.VSIXAsset{
143-
Type: storage.VSIXAssetType,
144-
Path: fmt.Sprintf("%s.%s-%s.vsix", ext.Publisher, ext.Name, version),
145-
Addressable: "true",
146-
})
147-
148-
return manifest
127+
return manifestBytes
149128
}
150129

151130
type file struct {

0 commit comments

Comments
 (0)
Please sign in to comment.