+ #[test]
+ fn handles_file_type() {
+ let strategy = Strategy {};
+ assert!(strategy.can_handle(&FileType::File));
+ }
+
+ #[test]
+ fn rejects_non_file_types() {
+ let strategy = Strategy {};
+ assert!(!strategy.can_handle(&FileType::Layout));
+ assert!(!strategy.can_handle(&FileType::Gemini));
+ assert!(!strategy.can_handle(&FileType::Unknown));
+ }
+
+ #[test]
+ fn copies_single_file() {
+ let test_dir = setup_test_dir();
+ let source_dir = test_dir.join("source");
+ let output_dir = test_dir.join("output");
+ create_dir_all(&source_dir)
+ .expect("Could not create source test directory");
+ create_dir_all(&output_dir)
+ .expect("Could not create output test directory");
+ create_test_file(&source_dir.join("image.png"), "A fish playing the banjo");
+ let strategy = Strategy {};
+
+ let file = File {
+ path: source_dir.join("image.png"),
+ file_type: FileType::File,
+ };
+
+ strategy.handle(&source_dir, &output_dir, &file);
+
+ let copied_path = &output_dir.join("image.png");
+ assert!(copied_path.exists());
+
+ // Verify file contents are identical
+ let original = fs::read(&file.path).unwrap();
+ let copied = fs::read(&copied_path).unwrap();
+ assert_eq!(original, copied);
+ }
+
+ #[test]
+ fn copies_nested_file() {
+ let test_dir = setup_test_dir();
+ let source_dir = test_dir.join("source");
+ let output_dir = test_dir.join("output");
+ create_dir_all(&source_dir)
+ .expect("Could not create source test directory");
+ create_dir_all(&output_dir)
+ .expect("Could not create output test directory");
+ create_dir_all(&source_dir.join("nested"))
+ .expect("Could not create source test directory");
+ create_test_file(&source_dir.join("nested/style.css"), "* { margin: 0; padding: 0 }");
+ let strategy = Strategy {};
+
+ let file = File {
+ path: source_dir.join("nested/style.css"),
+ file_type: FileType::File,
+ };
+
+ strategy.handle(&source_dir, &output_dir, &file);
+
+ let copied_path = output_dir.join("nested/style.css");
+ assert!(copied_path.exists());
+
+ // Verify file contents are identical
+ let original = fs::read(&file.path).unwrap();
+ let copied = fs::read(&copied_path).unwrap();
+ assert_eq!(original, copied);
+ }
+
+ #[test]
+ fn handle_html_copies_file() {
+ let test_dir = setup_test_dir();
+ let source_dir = test_dir.join("source");
+ let output_dir = test_dir.join("output");
+ create_dir_all(&source_dir)
+ .expect("Could not create source test directory");
+ create_dir_all(&output_dir)
+ .expect("Could not create output test directory");
+ create_test_file(&source_dir.join("image.png"), "A fish playing the banjo");
+ let strategy = Strategy {};
+
+ let file = File {
+ path: source_dir.join("image.png"),
+ file_type: FileType::File,
+ };
+
+ strategy.handle_html(&source_dir, &output_dir, &file, "unused layout");
+
+ let copied_path = &output_dir.join("image.png");
+ assert!(copied_path.exists());
+
+ // Verify file contents are identical
+ let original = fs::read(&file.path).unwrap();
+ let copied = fs::read(&copied_path).unwrap();
+ assert_eq!(original, copied);
+ }
+
+ #[test]
+ fn handle_gemini_copies_file() {
+ let test_dir = setup_test_dir();
+ let source_dir = test_dir.join("source");
+ let output_dir = test_dir.join("output");
+ create_dir_all(&source_dir)
+ .expect("Could not create source test directory");
+ create_dir_all(&output_dir)
+ .expect("Could not create output test directory");
+ create_test_file(&source_dir.join("image.png"), "A fish playing the banjo");
+ let strategy = Strategy {};
+
+ let file = File {
+ path: source_dir.join("image.png"),
+ file_type: FileType::File,
+ };
+
+ strategy.handle_gemini(&source_dir, &output_dir, &file);
+
+ let copied_path = &output_dir.join("image.png");
+ assert!(copied_path.exists());
+
+ // Verify file contents are identical
+ let original = fs::read(&file.path).unwrap();
+ let copied = fs::read(&copied_path).unwrap();
+ assert_eq!(original, copied);