Skip to content

Commit a05d0b4

Browse files
authored
Moved to go-utils v2 in devportalservice (#254)
* Moved to go-utils v2 in devportalservice
1 parent 31c9c98 commit a05d0b4

File tree

3 files changed

+124
-51
lines changed

3 files changed

+124
-51
lines changed

devportalservice/devportalservice.go

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import (
1212
"text/template"
1313
"time"
1414

15-
"github.com/bitrise-io/go-utils/fileutil"
16-
"github.com/bitrise-io/go-utils/log"
15+
"github.com/bitrise-io/go-utils/v2/fileutil"
16+
"github.com/bitrise-io/go-utils/v2/log"
1717
)
1818

1919
const appleDeveloperConnectionPath = "apple_developer_portal_data.json"
@@ -70,19 +70,21 @@ type AppleDeveloperConnectionProvider interface {
7070

7171
// BitriseClient implements AppleDeveloperConnectionProvider through the Bitrise.io API.
7272
type BitriseClient struct {
73-
httpClient httpClient
74-
buildURL, buildAPIToken string
73+
log log.Logger
74+
filemanager fileutil.FileManager
75+
httpClient httpClient
7576

76-
readBytesFromFile func(pth string) ([]byte, error)
77+
buildURL, buildAPIToken string
7778
}
7879

7980
// NewBitriseClient creates a new instance of BitriseClient.
80-
func NewBitriseClient(client httpClient, buildURL, buildAPIToken string) *BitriseClient {
81+
func NewBitriseClient(logger log.Logger, filemanager fileutil.FileManager, client httpClient, buildURL, buildAPIToken string) *BitriseClient {
8182
return &BitriseClient{
82-
httpClient: client,
83-
buildURL: buildURL,
84-
buildAPIToken: buildAPIToken,
85-
readBytesFromFile: fileutil.ReadBytesFromFile,
83+
log: logger,
84+
filemanager: filemanager,
85+
httpClient: client,
86+
buildURL: buildURL,
87+
buildAPIToken: buildAPIToken,
8688
}
8789
}
8890

@@ -98,6 +100,15 @@ func privateKeyWithHeader(privateKey string) string {
98100
)
99101
}
100102

103+
func (c *BitriseClient) readBytesFromFile(filepath string) ([]byte, error) {
104+
reader, err := c.filemanager.OpenReaderIfExists(filepath)
105+
if err != nil {
106+
return []byte{}, err
107+
}
108+
109+
return io.ReadAll(reader)
110+
}
111+
101112
// GetAppleDeveloperConnection fetches the Bitrise.io Apple Developer connection.
102113
func (c *BitriseClient) GetAppleDeveloperConnection() (*AppleDeveloperConnection, error) {
103114
var rawCreds []byte
@@ -163,7 +174,7 @@ func (c *BitriseClient) download() ([]byte, error) {
163174
// The client must close the response body when finished with it
164175
defer func() {
165176
if cerr := resp.Body.Close(); cerr != nil {
166-
log.Warnf("Failed to close response body: %s", cerr)
177+
c.log.Warnf("Failed to close response body: %s", cerr)
167178
}
168179
}()
169180

devportalservice/devportalservice_test.go

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,68 +6,69 @@ import (
66
"strings"
77
"testing"
88

9+
"github.com/bitrise-io/go-utils/v2/log"
910
"github.com/stretchr/testify/require"
1011
)
1112

1213
func TestGetAppleDeveloperConnection(t *testing.T) {
1314
tests := []struct {
1415
name string
1516

16-
response *http.Response
17-
err error
17+
responseContent string
18+
err error
1819

1920
want *AppleDeveloperConnection
2021
wantErr bool
2122
}{
2223
{
23-
name: "No Apple Developer Connection set for the build",
24-
response: &http.Response{
25-
StatusCode: 200,
26-
Body: io.NopCloser(strings.NewReader("{}")),
27-
},
28-
want: &AppleDeveloperConnection{},
29-
wantErr: false,
24+
name: "No Apple Developer Connection set for the build",
25+
responseContent: "{}",
26+
want: &AppleDeveloperConnection{},
27+
wantErr: false,
3028
},
3129
{
32-
name: "No Apple Developer Connection set for the build, test devices available",
33-
response: &http.Response{
34-
StatusCode: 200,
35-
Body: io.NopCloser(strings.NewReader(testDevicesResponseBody)),
36-
},
37-
want: &testConnectionOnlyDevices,
38-
wantErr: false,
30+
name: "No Apple Developer Connection set for the build, test devices available",
31+
responseContent: testDevicesResponseBody,
32+
want: &testConnectionOnlyDevices,
33+
wantErr: false,
3934
},
4035
{
41-
name: "Apple ID-based Apple Developer Connection set for the build",
42-
response: &http.Response{
43-
StatusCode: 200,
44-
Body: io.NopCloser(strings.NewReader(testAppleIDConnectionResponseBody)),
45-
},
46-
want: &testConnectionWithAppleIDConnection,
47-
wantErr: false,
36+
name: "Apple ID-based Apple Developer Connection set for the build",
37+
responseContent: testAppleIDConnectionResponseBody,
38+
want: &testConnectionWithAppleIDConnection,
39+
wantErr: false,
4840
},
4941
{
50-
name: "API key Apple Developer Connection set for the build",
51-
response: &http.Response{
52-
StatusCode: 200,
53-
Body: io.NopCloser(strings.NewReader(testAPIKeyConnectionResponseBody)),
54-
},
55-
want: &testConnectionWithAPIKeyConnection,
56-
wantErr: false,
42+
name: "API key Apple Developer Connection set for the build",
43+
responseContent: testAPIKeyConnectionResponseBody,
44+
want: &testConnectionWithAPIKeyConnection,
45+
wantErr: false,
5746
},
5847
{
59-
name: "Apple ID-based and API key Apple Developer Connection set for the build, test device available",
60-
response: &http.Response{
61-
StatusCode: 200,
62-
Body: io.NopCloser(strings.NewReader(testAppleIDAndAPIKeyConnectionResponseBody)),
63-
},
64-
want: &testConnectionWithAppleIDAndAPIKeyConnection,
65-
wantErr: false,
48+
name: "Apple ID-based and API key Apple Developer Connection set for the build, test device available",
49+
responseContent: testAppleIDAndAPIKeyConnectionResponseBody,
50+
want: &testConnectionWithAppleIDAndAPIKeyConnection,
51+
wantErr: false,
6652
},
6753
}
54+
55+
logger := log.NewLogger()
6856
for _, tt := range tests {
69-
t.Run(tt.name, func(t *testing.T) {
70-
c := NewBitriseClient(newMockHTTPClient(tt.response, nil), "dummy url", "dummy token")
57+
t.Run(tt.name+"_http", func(t *testing.T) {
58+
response :=
59+
&http.Response{
60+
StatusCode: 200,
61+
Body: io.NopCloser(strings.NewReader(tt.responseContent)),
62+
}
63+
64+
c := NewBitriseClient(logger, nil, newMockHTTPClient(response, nil), "dummy url", "dummy token")
65+
got, err := c.GetAppleDeveloperConnection()
66+
require.NoError(t, err)
67+
require.Equal(t, tt.want, got)
68+
})
69+
70+
t.Run(tt.name+"_file", func(t *testing.T) {
71+
c := NewBitriseClient(logger, newMockFileReader(tt.responseContent), nil, "file://dummy url", "dummy token")
7172
got, err := c.GetAppleDeveloperConnection()
7273
require.NoError(t, err)
7374
require.Equal(t, tt.want, got)
@@ -104,9 +105,11 @@ func TestFastlaneLoginSession(t *testing.T) {
104105
wantErr: false,
105106
},
106107
}
108+
109+
logger := log.NewLogger()
107110
for _, tt := range tests {
108111
t.Run(tt.name, func(t *testing.T) {
109-
c := NewBitriseClient(newMockHTTPClient(tt.response, nil), "dummy url", "dummy token")
112+
c := NewBitriseClient(logger, nil, newMockHTTPClient(tt.response, nil), "dummy url", "dummy token")
110113
conn, err := c.GetAppleDeveloperConnection()
111114
require.NoError(t, err)
112115

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package devportalservice
2+
3+
import (
4+
"io"
5+
"os"
6+
"strings"
7+
8+
"github.com/bitrise-io/go-utils/v2/fileutil"
9+
)
10+
11+
type mockFileReader struct {
12+
contents string
13+
}
14+
15+
func newMockFileReader(contents string) fileutil.FileManager {
16+
return &mockFileReader{
17+
contents: contents,
18+
}
19+
}
20+
21+
// Open ...
22+
func (r *mockFileReader) Open(path string) (*os.File, error) {
23+
panic("not implemented")
24+
}
25+
26+
// OpenReaderIfExists ...
27+
func (r *mockFileReader) OpenReaderIfExists(path string) (io.Reader, error) {
28+
return io.NopCloser(strings.NewReader(r.contents)), nil
29+
}
30+
31+
// ReadDirEntryNames ...
32+
func (r *mockFileReader) ReadDirEntryNames(path string) ([]string, error) {
33+
panic("not implemented")
34+
}
35+
36+
// Remove ...
37+
func (r *mockFileReader) Remove(path string) error {
38+
panic("not implemented")
39+
}
40+
41+
// RemoveAll ...
42+
func (r *mockFileReader) RemoveAll(path string) error {
43+
panic("not implemented")
44+
}
45+
46+
// Write ...
47+
func (r *mockFileReader) Write(path string, value string, perm os.FileMode) error {
48+
panic("not implemented")
49+
}
50+
51+
// WriteBytes ...
52+
func (r *mockFileReader) WriteBytes(path string, value []byte) error {
53+
panic("not implemented")
54+
}
55+
56+
// FileSizeInBytes ...
57+
func (r *mockFileReader) FileSizeInBytes(pth string) (int64, error) {
58+
panic("not implemented")
59+
}

0 commit comments

Comments
 (0)