diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-25 16:44:29 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-26 00:20:05 +0900 |
| commit | f5f429dbae0a3e2d8224c0b1e4edcef54805d286 (patch) | |
| tree | 9f837baeeae6efa0ed926b181b8c273128d86c49 /crates/shirabe/tests/repository/vcs/svn_driver_test.rs | |
| parent | 3a0d9340810a8808d963135a884f50d08442ac67 (diff) | |
| download | php-shirabe-f5f429dbae0a3e2d8224c0b1e4edcef54805d286.tar.gz php-shirabe-f5f429dbae0a3e2d8224c0b1e4edcef54805d286.tar.zst php-shirabe-f5f429dbae0a3e2d8224c0b1e4edcef54805d286.zip | |
feat(http): reimplement CurlDownloader on reqwest; port 15 more tests
Replace the libcurl-shim CurlDownloader with a reqwest+tokio implementation per
the .ken sketch, resolving the construction panic that blocked command tests
(mock path via __new_mock is untouched). Port remote_filesystem (7), hg/svn
driver (4), zip_archiver/git_exclude_filter (4) tests. Fix hg/svn/git_exclude
regex-delimiter and svn result-propagation porting bugs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/repository/vcs/svn_driver_test.rs')
| -rw-r--r-- | crates/shirabe/tests/repository/vcs/svn_driver_test.rs | 66 |
1 files changed, 60 insertions, 6 deletions
diff --git a/crates/shirabe/tests/repository/vcs/svn_driver_test.rs b/crates/shirabe/tests/repository/vcs/svn_driver_test.rs index 5ec9097..a1e79fc 100644 --- a/crates/shirabe/tests/repository/vcs/svn_driver_test.rs +++ b/crates/shirabe/tests/repository/vcs/svn_driver_test.rs @@ -9,9 +9,15 @@ use shirabe::io::IOInterface; use shirabe::io::null_io::NullIO; use shirabe::repository::vcs::SvnDriver; use shirabe::util::filesystem::Filesystem; -use shirabe_php_shim::PhpMixed; +use shirabe::util::http_downloader::HttpDownloaderMockHandler; +use shirabe::util::process_executor::MockHandler; +use shirabe_php_shim::{PhpMixed, RuntimeException}; use tempfile::TempDir; +use crate::http_downloader_mock::{HttpDownloaderMockGuard, get_http_downloader_mock}; +use crate::io_stub::IOStub; +use crate::process_executor_mock::{ProcessExecutorMockGuard, cmd_full, get_process_executor_mock}; + struct SetUp { home: TempDir, config: Config, @@ -75,13 +81,61 @@ fn test_support() { } } -// Constructs an SvnDriver and runs an svn command via a mocked ProcessExecutor; mocking is -// not available here. -#[ignore = "requires ProcessExecutor mock (getProcessExecutorMock/expects) and IOInterface/HttpDownloader mocks, none available"] #[test] fn test_wrong_credentials_in_url() { let SetUp { home, config } = set_up(); let _tear_down = TearDown::new(home.path().to_path_buf()); - let _ = &config; - todo!() + + let config = Rc::new(RefCell::new(config)); + let console: Rc<RefCell<dyn IOInterface>> = Rc::new(RefCell::new(IOStub::new())); + + let (http_downloader, _http_guard): (_, HttpDownloaderMockGuard) = + get_http_downloader_mock(vec![], false, HttpDownloaderMockHandler::default()); + + let mut output = String::from("svn: OPTIONS of 'https://corp.svn.local/repo':"); + output.push_str(" authorization failed: Could not authenticate to server:"); + output.push_str(" rejected Basic challenge (https://corp.svn.local/)"); + + let authed_command = [ + "svn", + "ls", + "--verbose", + "--non-interactive", + "--username", + "till", + "--password", + "secret", + "--", + "https://till:secret@corp.svn.local/repo/trunk", + ]; + + let (process, _process_guard): (_, ProcessExecutorMockGuard) = get_process_executor_mock( + vec![ + cmd_full(authed_command, 1, "", output.clone()), + cmd_full(authed_command, 1, "", output.clone()), + cmd_full(authed_command, 1, "", output.clone()), + cmd_full(authed_command, 1, "", output.clone()), + cmd_full(authed_command, 1, "", output.clone()), + cmd_full(authed_command, 1, "", output.clone()), + cmd_full(["svn", "--version"], 0, "1.2.3", ""), + ], + true, + MockHandler::default(), + ); + + let mut repo_config: IndexMap<String, PhpMixed> = IndexMap::new(); + repo_config.insert( + "url".to_string(), + PhpMixed::String("https://till:secret@corp.svn.local/repo".to_string()), + ); + + let mut svn = SvnDriver::new(repo_config, console, config, http_downloader, process); + let err = svn.initialize().unwrap_err(); + let runtime = err + .downcast_ref::<RuntimeException>() + .expect("expected RuntimeException"); + assert_eq!( + "Repository https://till:secret@corp.svn.local/repo could not be processed, wrong credentials provided (svn: OPTIONS of 'https://corp.svn.local/repo': authorization failed: Could not authenticate to server: rejected Basic challenge (https://corp.svn.local/))", + runtime.message + ); } |
