Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

[License Accepting Required] Custom filenames #885

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 13 commits into
base: master
Choose a base branch
Loading
from
Open
Prev Previous commit
Next Next commit
Refine template validation
  • Loading branch information
justinsilvestre committed Nov 30, 2024
commit 7079591d257d088a9f7c63ae5db068c2bff8188f
22 changes: 10 additions & 12 deletions 22 lib/utils/note_filename_template.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ class FileNameTemplate {
];
}

if (segmentsIncludeDate) {
final dateSegment =
segments.firstWhere((segment) => segment.variableName == 'date');
try {
_renderDate(DateTime.now(), dateSegment.variableOptions);
} catch (e) {
return ["Invalid date format: ${dateSegment.text}"];
}
}

return [];
});
if (segmentVariableErrors.isNotEmpty) {
Expand All @@ -69,16 +79,6 @@ class FileNameTemplate {
String? title,
}) {
final renderedSegments = segments.map((segment) {
final invalidOptions = segment.variableOptions?.keys.where((key) {
final validOptions =
validTemplateVariablesAndOptions[segment.variableName];
return validOptions != null ? validOptions.contains(key) : false;
}).toList();
if (invalidOptions != null && invalidOptions.isNotEmpty) {
throw Exception(
"Invalid option(s) for variable ${segment.variableName}: ${invalidOptions.join(', ')}");
}

if (segment.variableName == null) {
return segment.text;
} else if (segment.variableName == 'date') {
Expand Down Expand Up @@ -173,8 +173,6 @@ class _TemplateSegment {
_TemplateSegment(this.text, this.variableName, this.variableOptions);

isVariable() => variableName != null;

validate() {}
}

String _renderDate(DateTime date, Map<String, String>? variableOptions) {
Expand Down
46 changes: 27 additions & 19 deletions 46 test/utils/note_filename_template_test.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import 'package:test/test.dart';

import 'package:gitjournal/utils/note_filename_template.dart';
import 'package:test/test.dart';

void main() {
String renderTestTemplate(FileNameTemplate template, String? title) {
return template.render(
date: DateTime.parse('2022-02-27T19:00:00'),
root: 'root',
uuidv4: () => 'fake_uuid',
title: title,
);
}

group('valid FileNameTemplate', () {
String renderTestTemplate(FileNameTemplate template, String? title) {
return template.render(
date: DateTime.parse('2022-02-27T19:00:00'),
root: 'root',
uuidv4: () => 'fake_uuid',
title: title,
);
}

test('combining date and title + multiple title options', () async {
final template = FileNameTemplate.parse(
'{{date:fmt=yyyy_MM_dd}}_{{title:lowercase,snake_case}}');
Expand Down Expand Up @@ -107,30 +106,39 @@ void main() {
});

group('Invalid FileNameTemplate', () {
test('no unique identifier in template', () {
final template = FileNameTemplate.parse('static_file_name');

expect(
template.validate(),
isA<FileNameTemplateValidationFailure>(),
);
});

test('invalid date fmt', () {
final template = FileNameTemplate.parse('{{date:fmt=invalid format!!}}');

expect(
() => renderTestTemplate(template, "Some note title"),
throwsA(isA<Error>()),
template.validate(),
isA<FileNameTemplateValidationFailure>(),
);
});

test('invalid template variable', () {
final template = FileNameTemplate.parse('{{invalid_template_variable}}');

expect(
() => renderTestTemplate(template, "Some note title"),
throwsA(isA<Exception>()),
template.validate(),
isA<FileNameTemplateValidationFailure>(),
);
});

test('invalid option name', () {
final template = FileNameTemplate.parse('{{title:invalid_option_name}}');

expect(
() => renderTestTemplate(template, "Some note title"),
throwsA(isA<Exception>()),
template.validate(),
isA<FileNameTemplateValidationFailure>(),
);
});

Expand All @@ -139,8 +147,8 @@ void main() {
'{{invalid_template_variable:invalid_option_name}}');

expect(
() => renderTestTemplate(template, "Some note title"),
throwsA(isA<Exception>()),
template.validate(),
isA<FileNameTemplateValidationFailure>(),
);
});
});
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.