1
- import { describe , expect , it , vi } from "vitest" ;
1
+ import { beforeEach , describe , expect , it , vi } from "vitest" ;
2
2
3
3
import { createOptionDefaults } from "./index.js" ;
4
4
@@ -34,6 +34,14 @@ vi.mock("../../packages.js", () => ({
34
34
} ,
35
35
} ) ) ;
36
36
37
+ const mockReadGitHubEmail = vi . fn ( ) ;
38
+
39
+ vi . mock ( "./readGitHubEmail.js" , ( ) => ( {
40
+ get readGitHubEmail ( ) {
41
+ return mockReadGitHubEmail ;
42
+ } ,
43
+ } ) ) ;
44
+
37
45
describe ( "createOptionDefaults" , ( ) => {
38
46
describe ( "bin" , ( ) => {
39
47
it ( "returns undefined when package data does not have a bin" , async ( ) => {
@@ -56,24 +64,29 @@ describe("createOptionDefaults", () => {
56
64
} ) ;
57
65
58
66
describe ( "email" , ( ) => {
67
+ beforeEach ( ( ) => {
68
+ mockNpmUser . mockImplementation ( ( username : string ) => ( {
69
+ email : `npm-${ username } @test.com` ,
70
+ } ) ) ;
71
+ } ) ;
72
+
59
73
it ( "returns the npm whoami email from npm when only an npm exists" , async ( ) => {
60
74
mock$ . mockImplementation ( ( [ command ] : string [ ] ) =>
61
- command === "npm whoami" ? { stdout : "npm- username" } : undefined ,
75
+ command === "npm whoami" ? { stdout : "username" } : undefined ,
62
76
) ;
63
- mockNpmUser . mockImplementation ( ( username : string ) => ( {
64
- email : `test@${ username } .com` ,
65
- } ) ) ;
77
+ mockReadGitHubEmail . mockResolvedValueOnce ( undefined ) ;
66
78
67
79
const actual = await createOptionDefaults ( ) . email ( ) ;
68
80
69
81
expect ( actual ) . toEqual ( {
70
- github : "test@ npm-username.com" ,
71
- npm : "test@ npm-username.com" ,
82
+ github : "npm-username@test .com" ,
83
+ npm : "npm-username@test .com" ,
72
84
} ) ;
73
85
} ) ;
74
86
75
87
it ( "returns the npm whoami email from npm when only a package author email exists" , async ( ) => {
76
88
mock$ . mockResolvedValue ( { stdout : "" } ) ;
89
+ mockReadGitHubEmail . mockResolvedValueOnce ( undefined ) ;
77
90
mockReadPackageData . mockResolvedValue ( {
78
91
author : {
79
92
@@ -88,41 +101,75 @@ describe("createOptionDefaults", () => {
88
101
} ) ;
89
102
} ) ;
90
103
104
+ it ( "returns the github email when only a github email exists" , async ( ) => {
105
+ mock$ . mockResolvedValue ( { stdout : "" } ) ;
106
+ mockReadPackageData . mockResolvedValueOnce ( { } ) ;
107
+ mockReadGitHubEmail . mockResolvedValueOnce ( "[email protected] " ) ;
108
+
109
+ const actual = await createOptionDefaults ( ) . email ( ) ;
110
+
111
+ expect ( actual ) . toEqual ( {
112
+
113
+
114
+ } ) ;
115
+ } ) ;
116
+
91
117
it ( "returns the git user email when only a git user email exists" , async ( ) => {
92
118
mock$ . mockImplementation ( ( [ command ] : string [ ] ) =>
93
119
command === "git config --get user.email"
94
- ? { stdout : "test@ git.com" }
120
+ ? { stdout : "git@test .com" }
95
121
: undefined ,
96
122
) ;
123
+ mockReadGitHubEmail . mockResolvedValueOnce ( undefined ) ;
124
+ mockReadPackageData . mockResolvedValue ( { } ) ;
125
+
126
+ const actual = await createOptionDefaults ( ) . email ( ) ;
127
+
128
+ expect ( actual ) . toEqual ( {
129
+
130
+
131
+ } ) ;
132
+ } ) ;
133
+
134
+ it ( "returns both the git user email and the npm user email when only those two exist" , async ( ) => {
135
+ mock$ . mockImplementation ( ( [ command ] : string [ ] ) => ( {
136
+ stdout :
137
+ command === "git config --get user.email"
138
+
139
+ : "username" ,
140
+ } ) ) ;
141
+ mockReadGitHubEmail . mockResolvedValueOnce ( undefined ) ;
97
142
mockReadPackageData . mockResolvedValue ( { } ) ;
98
143
99
144
const actual = await createOptionDefaults ( ) . email ( ) ;
100
145
101
146
expect ( actual ) . toEqual ( {
102
- github : "test@ git.com" ,
103
- npm : "test@git .com" ,
147
+ github : "git@test .com" ,
148
+ npm : "npm-username@test .com" ,
104
149
} ) ;
105
150
} ) ;
106
151
107
- it ( "returns both the git user email and the npm user email when both exist" , async ( ) => {
152
+ it ( "returns all three emails when they all exist" , async ( ) => {
108
153
mock$ . mockImplementation ( ( [ command ] : string [ ] ) => ( {
109
154
stdout :
110
155
command === "git config --get user.email"
111
- ? "test@ git.com"
112
- : "npm- username" ,
156
+ ? "git@test .com"
157
+ : "username" ,
113
158
} ) ) ;
159
+ mockReadGitHubEmail . mockResolvedValueOnce ( "[email protected] " ) ;
114
160
mockReadPackageData . mockResolvedValue ( { } ) ;
115
161
116
162
const actual = await createOptionDefaults ( ) . email ( ) ;
117
163
118
164
expect ( actual ) . toEqual ( {
119
- github : "test@git .com" ,
120
- npm : "test@ npm-username.com" ,
165
+ github : "github@test .com" ,
166
+ npm : "npm-username@test .com" ,
121
167
} ) ;
122
168
} ) ;
123
169
124
- it ( "returns undefined when neither git nor npm emails exist" , async ( ) => {
170
+ it ( "returns undefined when none of the emails exist" , async ( ) => {
125
171
mock$ . mockResolvedValue ( { stdout : "" } ) ;
172
+ mockReadGitHubEmail . mockResolvedValueOnce ( undefined ) ;
126
173
mockReadPackageData . mockResolvedValue ( { } ) ;
127
174
128
175
const actual = await createOptionDefaults ( ) . email ( ) ;
0 commit comments