use anyhow::Result; use crate::domain::entities::{AudioTrack, Project, Track}; use crate::domain::value_objects::{FilePath, SyncOffset, TrackLanguage}; /// Adiciona uma faixa de áudio externa ao projeto. pub struct AddAudioTrack; impl AddAudioTrack { pub fn execute( project: &mut Project, path: FilePath, offset: SyncOffset, language: TrackLanguage, ) -> Result<()> { let id = project.next_track_id(); let track = AudioTrack::new(id, path, offset, language); project.tracks.push(Track::Audio(track)); Ok(()) } } #[cfg(test)] mod tests { use super::*; use crate::domain::entities::{MkvOutput, VideoFile}; use crate::domain::value_objects::FilePath; #[test] fn adiciona_audio_no_projeto() { let mut project = Project::new( VideoFile::new(FilePath::from("input.mkv")), MkvOutput::new(FilePath::from("output.mkv")), ) .unwrap(); let lang = TrackLanguage::new("por").unwrap(); AddAudioTrack::execute( &mut project, FilePath::from("audio_pt.aac"), SyncOffset::default(), lang, ) .unwrap(); assert_eq!(project.tracks.len(), 1); assert!(matches!(project.tracks[0], Track::Audio(_))); } }