@@ -284,8 +284,8 @@ BOOST_AUTO_TEST_CASE(catalog_reload_uses_cached_metadata_without_parsing_score_j
|
||||
BOOST_REQUIRE(db.build());
|
||||
// Complete cached metadata must not require parsing or retaining the score body.
|
||||
db.query("INSERT INTO songs(id, title, composer, source_json, part, source_path, "
|
||||
"key_signature, measure_count, total_pages, title_image) "
|
||||
"VALUES('tune', 'Metadata Song', 'Composer', '{\"presentation\":{\"playback_pages\":[{},{},{}]}}', 'Lead', 'songs/tune.json', 'F', 3, 2, '0000000000000000000000000000000000000000000000000000000000000000')");
|
||||
"key_signature, measure_count, total_pages, title_image, solos_enabled) "
|
||||
"VALUES('tune', 'Metadata Song', 'Composer', '{\"presentation\":{\"playback_pages\":[{},{},{}]}}', 'Lead', 'songs/tune.json', 'F', 3, 2, '0000000000000000000000000000000000000000000000000000000000000000', 1)");
|
||||
auto songs = db.rows("songs");
|
||||
for (auto attempt = std::uint32_t{}; attempt < 2U; ++attempt) {
|
||||
auto performance = db.performance();
|
||||
@@ -303,6 +303,31 @@ BOOST_AUTO_TEST_CASE(catalog_reload_uses_cached_metadata_without_parsing_score_j
|
||||
BOOST_TEST(song.error().code() == static_cast<std::int32_t>(vamp_zero::error_code::INVALID_ARGUMENT));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(catalog_loads_solo_variants_and_rejects_incomplete_pairs) {
|
||||
auto db = catalog_database{};
|
||||
for (auto enabled : {true, false}) {
|
||||
auto value = boost::json::parse(catalog_bundle("Variants", "C", "Acoustic"));
|
||||
value.at("music").at("metadata").as_object()["solos_enabled"] = enabled;
|
||||
value.at("music").at("staves").as_array().front().as_object()["arranged"] = true;
|
||||
db.write(enabled ? "songs/acoustic.json" : "songs/acoustic_improv.json", boost::json::serialize(value));
|
||||
}
|
||||
BOOST_REQUIRE(db.build());
|
||||
BOOST_REQUIRE(run_catalog_operation(vamp_zero::async_validate_database, db.config, true));
|
||||
auto loaded = db.performance();
|
||||
BOOST_REQUIRE(loaded);
|
||||
BOOST_REQUIRE_EQUAL(loaded->parts.size(), 2U);
|
||||
BOOST_TEST(loaded->parts[0].solos_enabled);
|
||||
BOOST_TEST(!loaded->parts[1].solos_enabled);
|
||||
auto score = db.score("acoustic_improv");
|
||||
BOOST_REQUIRE(score);
|
||||
BOOST_TEST(!boost::json::parse(score->source_json).at("music").at("metadata").at("solos_enabled").as_bool());
|
||||
db.query("DELETE FROM songs WHERE solos_enabled = 0");
|
||||
BOOST_TEST(!run_catalog_operation(vamp_zero::async_validate_database, db.config, true));
|
||||
BOOST_REQUIRE(db.build());
|
||||
db.query("ALTER TABLE songs DROP COLUMN solos_enabled");
|
||||
BOOST_TEST(!run_catalog_operation(vamp_zero::async_validate_database, db.config, false));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(catalog_validation_rejects_missing_incompatible_and_corrupt_files_without_repair) {
|
||||
auto db = catalog_database{};
|
||||
auto validate = [&] { return run_catalog_operation(vamp_zero::async_validate_database, db.config, true); };
|
||||
|
||||
Reference in New Issue
Block a user