mock_http 0.1.0

A simple mock http server for use in testing
Documentation
use std::{
    io::Cursor,
    sync::{
        mpsc::{channel, Sender},
        Arc,
    },
};

use tiny_http::{Response, Server};

pub struct TestServer {
    server: Server,
    sender: Sender<Response<Cursor<Vec<u8>>>>,
}

impl TestServer {
    pub fn new() -> Arc<TestServer> {
        let (sender, receiver) = channel();
        let server = Arc::new(TestServer {
            server: Server::http("0.0.0.0:0").unwrap(),
            sender,
        });
        let test_server = server.clone();

        std::thread::spawn(move || {
            while let Ok(request) = test_server.server.recv() {
                let Ok(response) = receiver.recv() else {
                    request
                        .respond(Response::from_string("No responses queued").with_status_code(500))
                        .unwrap();
                    return;
                };

                request.respond(response).unwrap();
            }
        });

        server
    }

    pub fn add_response(&self, response: Response<Cursor<Vec<u8>>>) {
        self.sender.send(response).unwrap()
    }

    pub fn url(&self) -> String {
        format!("http://{}", self.server.server_addr().to_string())
    }
}