do not use temp files for tests
This commit is contained in:
parent
9197b01e01
commit
81409f75f5
3 changed files with 21 additions and 65 deletions
|
@ -45,7 +45,11 @@ pub fn loadConfig(allocator: Allocator, path: []const u8) !Config {
|
||||||
const content = try file.readToEndAlloc(allocator, 1024 * 1024);
|
const content = try file.readToEndAlloc(allocator, 1024 * 1024);
|
||||||
defer allocator.free(content);
|
defer allocator.free(content);
|
||||||
|
|
||||||
const parsed = try json.parseFromSlice(json.Value, allocator, content, .{});
|
return parseConfigFromJson(allocator, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn parseConfigFromJson(allocator: Allocator, json_content: []const u8) !Config {
|
||||||
|
const parsed = try json.parseFromSlice(json.Value, allocator, json_content, .{});
|
||||||
defer parsed.deinit();
|
defer parsed.deinit();
|
||||||
|
|
||||||
const root = parsed.value.object;
|
const root = parsed.value.object;
|
||||||
|
|
64
src/main.zig
64
src/main.zig
|
@ -221,15 +221,16 @@ fn loadExistingReleases(allocator: Allocator, filename: []const u8) !ArrayList(R
|
||||||
const content = try file.readToEndAlloc(allocator, 10 * 1024 * 1024);
|
const content = try file.readToEndAlloc(allocator, 10 * 1024 * 1024);
|
||||||
defer allocator.free(content);
|
defer allocator.free(content);
|
||||||
|
|
||||||
print("Loading existing releases from {s}...\n", .{filename});
|
return parseReleasesFromXml(allocator, content);
|
||||||
|
}
|
||||||
|
|
||||||
const releases = xml_parser.parseAtomFeed(allocator, content) catch |err| {
|
fn parseReleasesFromXml(allocator: Allocator, xml_content: []const u8) !ArrayList(Release) {
|
||||||
print("Warning: Failed to parse existing releases file: {}\n", .{err});
|
const releases = xml_parser.parseAtomFeed(allocator, xml_content) catch |err| {
|
||||||
|
print("Warning: Failed to parse XML content: {}\n", .{err});
|
||||||
print("Starting fresh with no existing releases\n", .{});
|
print("Starting fresh with no existing releases\n", .{});
|
||||||
return ArrayList(Release).init(allocator);
|
return ArrayList(Release).init(allocator);
|
||||||
};
|
};
|
||||||
|
|
||||||
print("Loaded {} existing releases\n", .{releases.items.len});
|
|
||||||
return releases;
|
return releases;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -451,7 +452,7 @@ test "Atom feed has correct structure" {
|
||||||
test "loadExistingReleases with valid XML" {
|
test "loadExistingReleases with valid XML" {
|
||||||
const allocator = std.testing.allocator;
|
const allocator = std.testing.allocator;
|
||||||
|
|
||||||
// Create a temporary file with valid Atom XML
|
// Test XML content
|
||||||
const test_xml =
|
const test_xml =
|
||||||
\\<?xml version="1.0" encoding="UTF-8"?>
|
\\<?xml version="1.0" encoding="UTF-8"?>
|
||||||
\\<feed xmlns="http://www.w3.org/2005/Atom">
|
\\<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
@ -466,18 +467,8 @@ test "loadExistingReleases with valid XML" {
|
||||||
\\</feed>
|
\\</feed>
|
||||||
;
|
;
|
||||||
|
|
||||||
const temp_filename = "test_releases.xml";
|
// Parse releases directly from XML content
|
||||||
|
var releases = try parseReleasesFromXml(allocator, test_xml);
|
||||||
// Write test XML to file
|
|
||||||
{
|
|
||||||
const file = try std.fs.cwd().createFile(temp_filename, .{});
|
|
||||||
defer file.close();
|
|
||||||
try file.writeAll(test_xml);
|
|
||||||
}
|
|
||||||
defer std.fs.cwd().deleteFile(temp_filename) catch {};
|
|
||||||
|
|
||||||
// Load existing releases
|
|
||||||
var releases = try loadExistingReleases(allocator, temp_filename);
|
|
||||||
defer {
|
defer {
|
||||||
for (releases.items) |release| {
|
for (releases.items) |release| {
|
||||||
release.deinit(allocator);
|
release.deinit(allocator);
|
||||||
|
@ -503,18 +494,9 @@ test "loadExistingReleases with malformed XML" {
|
||||||
const allocator = std.testing.allocator;
|
const allocator = std.testing.allocator;
|
||||||
|
|
||||||
const malformed_xml = "This is not valid XML at all!";
|
const malformed_xml = "This is not valid XML at all!";
|
||||||
const temp_filename = "test_malformed.xml";
|
|
||||||
|
|
||||||
// Write malformed XML to file
|
|
||||||
{
|
|
||||||
const file = try std.fs.cwd().createFile(temp_filename, .{});
|
|
||||||
defer file.close();
|
|
||||||
try file.writeAll(malformed_xml);
|
|
||||||
}
|
|
||||||
defer std.fs.cwd().deleteFile(temp_filename) catch {};
|
|
||||||
|
|
||||||
// Should handle gracefully and return empty list
|
// Should handle gracefully and return empty list
|
||||||
var releases = try loadExistingReleases(allocator, temp_filename);
|
var releases = try parseReleasesFromXml(allocator, malformed_xml);
|
||||||
defer releases.deinit();
|
defer releases.deinit();
|
||||||
|
|
||||||
try std.testing.expectEqual(@as(usize, 0), releases.items.len);
|
try std.testing.expectEqual(@as(usize, 0), releases.items.len);
|
||||||
|
@ -596,18 +578,8 @@ test "loadExistingReleases handles various XML structures" {
|
||||||
\\</feed>
|
\\</feed>
|
||||||
;
|
;
|
||||||
|
|
||||||
const temp_filename = "test_minimal.xml";
|
// Parse releases directly from XML content
|
||||||
|
var releases = try parseReleasesFromXml(allocator, minimal_xml);
|
||||||
// Write test XML to file
|
|
||||||
{
|
|
||||||
const file = try std.fs.cwd().createFile(temp_filename, .{});
|
|
||||||
defer file.close();
|
|
||||||
try file.writeAll(minimal_xml);
|
|
||||||
}
|
|
||||||
defer std.fs.cwd().deleteFile(temp_filename) catch {};
|
|
||||||
|
|
||||||
// Load existing releases
|
|
||||||
var releases = try loadExistingReleases(allocator, temp_filename);
|
|
||||||
defer {
|
defer {
|
||||||
for (releases.items) |release| {
|
for (releases.items) |release| {
|
||||||
release.deinit(allocator);
|
release.deinit(allocator);
|
||||||
|
@ -655,18 +627,8 @@ test "loadExistingReleases with complex XML content" {
|
||||||
\\</feed>
|
\\</feed>
|
||||||
;
|
;
|
||||||
|
|
||||||
const temp_filename = "test_complex.xml";
|
// Parse releases directly from XML content
|
||||||
|
var releases = try parseReleasesFromXml(allocator, complex_xml);
|
||||||
// Write test XML to file
|
|
||||||
{
|
|
||||||
const file = try std.fs.cwd().createFile(temp_filename, .{});
|
|
||||||
defer file.close();
|
|
||||||
try file.writeAll(complex_xml);
|
|
||||||
}
|
|
||||||
defer std.fs.cwd().deleteFile(temp_filename) catch {};
|
|
||||||
|
|
||||||
// Load existing releases
|
|
||||||
var releases = try loadExistingReleases(allocator, temp_filename);
|
|
||||||
defer {
|
defer {
|
||||||
for (releases.items) |release| {
|
for (releases.items) |release| {
|
||||||
release.deinit(allocator);
|
release.deinit(allocator);
|
||||||
|
|
|
@ -10,7 +10,7 @@ const SourceHutConfig = config.SourceHutConfig;
|
||||||
test "Config loading without last_check field" {
|
test "Config loading without last_check field" {
|
||||||
const allocator = std.testing.allocator;
|
const allocator = std.testing.allocator;
|
||||||
|
|
||||||
// Create a test config file without last_check
|
// Create a test config JSON content without last_check
|
||||||
const test_config_content =
|
const test_config_content =
|
||||||
\\{
|
\\{
|
||||||
\\ "github_token": "test_token",
|
\\ "github_token": "test_token",
|
||||||
|
@ -22,18 +22,8 @@ test "Config loading without last_check field" {
|
||||||
\\}
|
\\}
|
||||||
;
|
;
|
||||||
|
|
||||||
const temp_config_file = "test_config_no_last_check.json";
|
// Parse config directly from JSON content
|
||||||
|
const loaded_config = try config.parseConfigFromJson(allocator, test_config_content);
|
||||||
// Write test config to file
|
|
||||||
{
|
|
||||||
const file = try std.fs.cwd().createFile(temp_config_file, .{});
|
|
||||||
defer file.close();
|
|
||||||
try file.writeAll(test_config_content);
|
|
||||||
}
|
|
||||||
defer std.fs.cwd().deleteFile(temp_config_file) catch {};
|
|
||||||
|
|
||||||
// Load config
|
|
||||||
const loaded_config = try config.loadConfig(allocator, temp_config_file);
|
|
||||||
defer loaded_config.deinit();
|
defer loaded_config.deinit();
|
||||||
|
|
||||||
// Verify config was loaded correctly
|
// Verify config was loaded correctly
|
||||||
|
|
Loading…
Add table
Reference in a new issue