// Package exporters_test provides tests for the html exporter. package exporters import ( "bytes" "os" "path/filepath" "strings" "testing" "github.com/kjanat/articulate-parser/internal/models" "github.com/kjanat/articulate-parser/internal/services" ) // TestNewHTMLExporter tests the NewHTMLExporter constructor. func TestNewHTMLExporter(t *testing.T) { htmlCleaner := services.NewHTMLCleaner() exporter := NewHTMLExporter(htmlCleaner) if exporter == nil { t.Fatal("NewHTMLExporter() returned nil") } // Type assertion to check internal structure htmlExporter, ok := exporter.(*HTMLExporter) if !ok { t.Fatal("NewHTMLExporter() returned wrong type") } if htmlExporter.htmlCleaner == nil { t.Error("htmlCleaner should not be nil") } } // TestHTMLExporter_GetSupportedFormat tests the GetSupportedFormat method. func TestHTMLExporter_GetSupportedFormat(t *testing.T) { htmlCleaner := services.NewHTMLCleaner() exporter := NewHTMLExporter(htmlCleaner) expected := "html" result := exporter.GetSupportedFormat() if result != expected { t.Errorf("Expected format '%s', got '%s'", expected, result) } } // TestHTMLExporter_Export tests the Export method. func TestHTMLExporter_Export(t *testing.T) { htmlCleaner := services.NewHTMLCleaner() exporter := NewHTMLExporter(htmlCleaner) // Create test course testCourse := createTestCourseForHTML() // Create temporary directory and file tempDir := t.TempDir() outputPath := filepath.Join(tempDir, "test-course.html") // Test successful export err := exporter.Export(testCourse, outputPath) if err != nil { t.Fatalf("Export failed: %v", err) } // Check that file was created if _, err := os.Stat(outputPath); os.IsNotExist(err) { t.Fatal("Output file was not created") } // Read and verify content content, err := os.ReadFile(outputPath) if err != nil { t.Fatalf("Failed to read output file: %v", err) } contentStr := string(content) // Verify HTML structure if !strings.Contains(contentStr, "") { t.Error("Output should contain HTML doctype") } if !strings.Contains(contentStr, "") { t.Error("Output should contain HTML tag with lang attribute") } if !strings.Contains(contentStr, "