do not use temp files for tests

This commit is contained in:
Emil Lerch 2025-07-14 15:39:14 -07:00
parent 9197b01e01
commit 81409f75f5
Signed by: lobo
GPG key ID: A7B62D657EF764F8
3 changed files with 21 additions and 65 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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