1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#[cfg(test)]
mod tests {
    use crate::reddit::request::{
        params::{FeedRequestParams, FeedSorting, FeedSortingTime, RequestSize},
        RedditRequest,
    };

    fn init() {
        let _ = env_logger::builder().is_test(true).try_init();
    }

    #[test]
    fn test_create_url_subreddit_posts() {
        let req = RedditRequest::SubredditPosts {
            subreddit: "Polska".to_string(),
            params: FeedRequestParams {
                size: RequestSize::Medium,
                sorting: FeedSorting::New,
            },
        };
        let (url, query) = req.into_http_request_parts();
        assert_eq!(url, "https://oauth.reddit.com/r/Polska/new.json");
        assert_eq!(query, vec![("limit", "250".to_string())]);
    }

    #[test]
    fn test_create_url_subreddit_info() {
        let req = RedditRequest::SubredditInfo {
            subreddit: "Polska".to_string(),
        };
        let (url, query) = req.into_http_request_parts();
        assert_eq!(url, "https://oauth.reddit.com/r/Polska/about.json");
        assert_eq!(query, vec![]);
    }

    #[test]
    fn test_create_url_user_posts() {
        let req = RedditRequest::UserPosts {
            username: "spez".to_string(),
            params: FeedRequestParams {
                size: RequestSize::Small,
                sorting: FeedSorting::Top(FeedSortingTime::All),
            },
        };
        let (url, query) = req.into_http_request_parts();
        assert_eq!(url, "https://oauth.reddit.com/user/spez.json");
        assert_eq!(
            query,
            vec![
                ("limit", "50".to_string()),
                ("sort", "top".to_string()),
                ("t", "all".to_string())
            ]
        );
    }

    #[test]
    fn test_create_url_user_info() {
        let req = RedditRequest::UserInfo {
            username: "spez".to_string(),
        };
        let (url, query) = req.into_http_request_parts();
        assert_eq!(url, "https://oauth.reddit.com/user/spez/about.json");
        assert_eq!(query, vec![]);
    }

    #[test]
    fn test_create_url_post_comments() {
        let req = RedditRequest::PostComments {
            subreddit: "Polska".to_string(),
            post_id: "abc123".to_string(),
            params: FeedRequestParams {
                size: RequestSize::Custom(10),
                sorting: FeedSorting::Controversial(FeedSortingTime::Day),
            },
        };
        let (url, query) = req.into_http_request_parts();
        assert_eq!(
            url,
            "https://oauth.reddit.com/r/Polska/comments/abc123.json"
        );
        assert_eq!(
            query,
            vec![
                ("limit", "10".to_string()),
                ("sort", "controversial".to_string()),
                ("t", "day".to_string())
            ]
        );
    }

    #[test]
    fn test_create_default_params() {
        let req = RedditRequest::PostComments {
            subreddit: "Polska".to_string(),
            post_id: "abc123".to_string(),
            params: FeedRequestParams::default(),
        };
        let (url, query) = req.into_http_request_parts();
        assert_eq!(
            url,
            "https://oauth.reddit.com/r/Polska/comments/abc123.json"
        );
        assert_eq!(
            query,
            vec![("limit", "50".to_string()), ("sort", "hot".to_string())]
        );
    }
}