Skip to content

Commit 55de016

Browse files
Merge pull request #32 from leancodepl/feat/ci-setup-and-model-provider-tests
Add model provider tests and ci for tests
2 parents 1e9c92a + 21df119 commit 55de016

File tree

3 files changed

+183
-16
lines changed

3 files changed

+183
-16
lines changed

.github/workflows/publish.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Publish to pub.dev
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v[0-9]+.[0-9]+.[0-9]+'
7+
8+
jobs:
9+
publish:
10+
name: Publish to pub.dev
11+
12+
runs-on: ubuntu-latest
13+
14+
permissions:
15+
id-token: write
16+
contents: write
17+
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v3
21+
22+
- name: Set up Dart
23+
uses: dart-lang/setup-dart@v1
24+
with:
25+
sdk: stable
26+
27+
- name: Publish and release
28+
uses: leancodepl/mobile-tools/.github/actions/pub-release@pub-release-v1

.github/workflows/run-tests.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: test
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches:
9+
- main
10+
11+
jobs:
12+
run-tests:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v4
18+
19+
- name: Setup Dart
20+
uses: dart-lang/setup-dart@v1
21+
with:
22+
sdk: stable
23+
24+
- name: Get dependencies
25+
run: dart pub get
26+
27+
- name: Analyze code
28+
run: dart analyze
29+
30+
- name: Run tests (for now only translation options)
31+
run: dart test test/translation_options_test.dart
32+
33+
- name: Dry run pub publish
34+
run: dart pub publish --dry-run || true

test/translation_options_test.dart

Lines changed: 121 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,26 @@ import 'package:file/memory.dart';
33
import 'package:test/test.dart';
44

55
void main() {
6+
const argResultsApiKey = 'argResultsApiKey';
7+
const argResultsDisableSafety = true;
8+
const argResultsContext = 'argResultsContext';
9+
const argResultsExcludeLocales = ['pl'];
10+
const argResultsBatchSize = 4096;
11+
const argResultsArbDir = 'argResultsArbDir';
12+
const argResultsTemplateArbFile = 'argResultsTemplateArbFile';
13+
const argResultsUseEscaping = true;
14+
const argResultsRelaxSyntax = true;
15+
616
group(
717
'TranslateOptions',
818
() {
919
test(
1020
'resolve returns options with values from argResults over yamlResults',
1121
() {
12-
const argResultsModelProvider = ModelProvider.gemini;
22+
const argResultsModel = Model.gemini25Flash;
1323
const argResultsCustomModelProviderUrl =
1424
'http://argResultsCustomModelProviderBaseUrl';
15-
const argResultsModel = Model.gemini25Flash;
1625
const argResultsCustomModel = 'argResultsCustomModel';
17-
const argResultsApiKey = 'argResultsApiKey';
18-
const argResultsDisableSafety = true;
19-
const argResultsContext = 'argResultsContext';
20-
const argResultsExcludeLocales = ['pl'];
21-
const argResultsBatchSize = 4096;
22-
const argResultsArbDir = 'argResultsArbDir';
23-
const argResultsTemplateArbFile = 'argResultsTemplateArbFile';
24-
const argResultsUseEscaping = true;
25-
const argResultsRelaxSyntax = true;
2626

2727
final argResults = TranslateArgResults(
2828
help: false,
@@ -64,11 +64,6 @@ void main() {
6464
expect(
6565
translateOptions,
6666
isA<TranslateOptions>()
67-
.having(
68-
(options) => options.modelProvider,
69-
'modelProvider',
70-
argResultsModelProvider,
71-
)
7267
.having(
7368
(options) => options.customModelProviderBaseUrl,
7469
'customModelProviderBaseUrl',
@@ -134,4 +129,114 @@ void main() {
134129
);
135130
},
136131
);
132+
133+
group(
134+
'modelProvider resolving',
135+
() {
136+
test('resolves gemini provider', () {
137+
const argResultsModel = Model.gemini25Flash;
138+
139+
final argResults = TranslateArgResults(
140+
help: false,
141+
customModelProviderBaseUrl: null,
142+
model: argResultsModel,
143+
customModel: null,
144+
apiKey: argResultsApiKey,
145+
disableSafety: argResultsDisableSafety,
146+
context: argResultsContext,
147+
excludeLocales: argResultsExcludeLocales,
148+
batchSize: argResultsBatchSize,
149+
arbDir: argResultsArbDir,
150+
templateArbFile: argResultsTemplateArbFile,
151+
useEscaping: argResultsUseEscaping,
152+
relaxSyntax: argResultsRelaxSyntax,
153+
);
154+
final yamlResults = TranslateYamlResults.empty();
155+
156+
final translateOptions = TranslateOptions.resolve(
157+
MemoryFileSystem(),
158+
argResults,
159+
yamlResults,
160+
);
161+
162+
expect(
163+
translateOptions,
164+
isA<TranslateOptions>().having((options) => options.modelProvider,
165+
'modelProvider', ModelProvider.gemini));
166+
});
167+
168+
test('resolves openAI provider', () {
169+
const argResultsModel = Model.gpt5Mini;
170+
171+
final argResults = TranslateArgResults(
172+
help: false,
173+
customModelProviderBaseUrl: null,
174+
model: argResultsModel,
175+
customModel: null,
176+
apiKey: argResultsApiKey,
177+
disableSafety: argResultsDisableSafety,
178+
context: argResultsContext,
179+
excludeLocales: argResultsExcludeLocales,
180+
batchSize: argResultsBatchSize,
181+
arbDir: argResultsArbDir,
182+
templateArbFile: argResultsTemplateArbFile,
183+
useEscaping: argResultsUseEscaping,
184+
relaxSyntax: argResultsRelaxSyntax,
185+
);
186+
final yamlResults = TranslateYamlResults.empty();
187+
188+
final translateOptions = TranslateOptions.resolve(
189+
MemoryFileSystem(),
190+
argResults,
191+
yamlResults,
192+
);
193+
194+
expect(
195+
translateOptions,
196+
isA<TranslateOptions>().having((options) => options.modelProvider,
197+
'modelProvider', ModelProvider.openAi));
198+
});
199+
200+
test(
201+
'resolves customOpenAiCompatible provider with custom model taking precedence',
202+
() {
203+
const argResultsModel = Model.gemini25Flash;
204+
const argResultsCustomModelProviderUrl =
205+
'http://argResultsCustomModelProviderBaseUrl';
206+
const argResultsCustomModel = 'argResultsCustomModel';
207+
208+
final argResults = TranslateArgResults(
209+
help: false,
210+
customModelProviderBaseUrl: argResultsCustomModelProviderUrl,
211+
model: argResultsModel,
212+
customModel: argResultsCustomModel,
213+
apiKey: argResultsApiKey,
214+
disableSafety: argResultsDisableSafety,
215+
context: argResultsContext,
216+
excludeLocales: argResultsExcludeLocales,
217+
batchSize: argResultsBatchSize,
218+
arbDir: argResultsArbDir,
219+
templateArbFile: argResultsTemplateArbFile,
220+
useEscaping: argResultsUseEscaping,
221+
relaxSyntax: argResultsRelaxSyntax,
222+
);
223+
final yamlResults = TranslateYamlResults.empty();
224+
225+
final translateOptions = TranslateOptions.resolve(
226+
MemoryFileSystem(),
227+
argResults,
228+
yamlResults,
229+
);
230+
231+
expect(
232+
translateOptions,
233+
isA<TranslateOptions>()
234+
.having((o) => o.modelProvider, 'modelProvider',
235+
ModelProvider.customOpenAiCompatible)
236+
.having(
237+
(o) => o.customModel, 'customModel', argResultsCustomModel),
238+
);
239+
});
240+
},
241+
);
137242
}

0 commit comments

Comments
 (0)