halkyon/test/release/notes_test.dart

153 lines
4 KiB
Dart
Raw Normal View History

import 'package:test/test.dart';
import '../../tool/src/release/app_release.dart';
import '../../tool/src/release/notes.dart';
import '../../tool/src/release/version.dart';
import 'fixtures.dart';
void main() {
const certificate =
'27e243fcbdc826ff98ab7dbb10436c98c3bea24b2a015e94e4cfc7d1fc2a006c';
const fingerprint =
'E8082788756F6B7E682AA22FCEAD24B53E2A8B0912AD66D65E8C2D4F07BB94B0';
const signer = '0123456789ABCDEF0123456789ABCDEF01234567';
String notes({
AppRelease app = testApp,
String? previousTag = 'notes-v0.18.0',
List<Commit> commits = const [],
String? whatsNew,
}) => releaseNotes(
app: app,
version: const Version(0, 19, 0),
previousTag: previousTag,
commits: commits,
certificate: certificate,
fdroidFingerprint: fingerprint,
signer: signer,
whatsNew: whatsNew,
);
test("with what's new, the notes give it in place of the commits", () {
final text = notes(
commits: const [Commit(hash: 'a', subject: 'feat: tiles')],
whatsNew: '- Tiles on the first start.\n\n- Flags.\n',
);
expect(
text,
contains(
"the project's instance.\n"
'\n'
"### What's new\n"
'\n'
'- Tiles on the first start.\n'
'- Flags.\n'
'\n'
'### Installing\n',
),
);
expect(text, isNot(contains('### Features')));
});
test("a release's notes list its features and fixes, oldest first, "
'without their types and scopes', () {
final text = notes(
commits: const [
Commit(hash: 'a', subject: 'feat(app): tiles on the first start'),
Commit(hash: 'b', subject: 'docs: why'),
Commit(hash: 'c', subject: 'fix(sync)!: no lost rating'),
Commit(hash: 'd', subject: 'perf: faster library'),
Commit(hash: 'e', subject: 'feat: flags'),
],
);
expect(
text,
startsWith(
'Halkyon Notes 0.19.0 for Android and Linux. Both connect to '
"notes.halkyon.eu, the project's instance.\n"
'\n'
'### Features\n'
'\n'
'- tiles on the first start\n'
'- flags\n'
'\n'
'### Fixes\n'
'\n'
'- no lost rating\n'
'- faster library\n'
'\n'
'### Installing\n',
),
);
});
test('they say how to install and check every file', () {
final text = notes(
commits: const [Commit(hash: 'a', subject: 'fix: x')],
);
expect(
text,
contains(
'- **Android:** `halkyon-notes-0.19.0.apk`, one APK for every phone, '
"signed with the app's key; the SHA-256 of its certificate is "
'`$certificate`.\n',
),
);
expect(
text,
contains(
'- **F-Droid:** the same APK in the repository '
'https://halkyon.app/fdroid/repo?fingerprint=$fingerprint\n',
),
);
expect(
text,
contains(
'- **Linux:** `halkyon-notes_0.19.0_amd64.snap`: `sudo snap install '
'--dangerous halkyon-notes_0.19.0_amd64.snap` (not in the Snap Store '
'yet).\n',
),
);
expect(
text,
endsWith(
"`SHA256SUMS` lists the files' checksums, signed with the GPG key "
'`$signer` (`SHA256SUMS.asc`).',
),
);
});
test('a snap in the Store is installed from its channel', () {
final text = notes(
app: testApp.copyWith(
snap: const SnapRelease(
name: 'halkyon-notes',
part: 'halkyon-notes',
directory: 'snap',
storeChannel: 'edge',
),
),
);
expect(
text,
contains(
'- **Linux:** `halkyon-notes_0.19.0_amd64.snap`, also in the Snap '
'Store: `snap install halkyon-notes --edge`.\n',
),
);
});
test('the first release says so, one without features or fixes too', () {
expect(notes(previousTag: null), contains('\n\nThe first release.\n\n'));
expect(
notes(
commits: const [Commit(hash: 'a', subject: 'docs: x')],
),
contains('\n\nNo features or fixes since notes-v0.18.0.\n\n'),
);
});
}