1import pickle 2 3import pytest 4from praw.exceptions import ClientException 5from praw.models import Submission 6 7from ... import UnitTest 8 9 10class TestSubmission(UnitTest): 11 def test_equality(self): 12 submission1 = Submission(self.reddit, _data={"id": "dummy1", "n": 1}) 13 submission2 = Submission(self.reddit, _data={"id": "Dummy1", "n": 2}) 14 submission3 = Submission(self.reddit, _data={"id": "dummy3", "n": 2}) 15 assert submission1 == submission1 16 assert submission2 == submission2 17 assert submission3 == submission3 18 assert submission1 == submission2 19 assert submission2 != submission3 20 assert submission1 != submission3 21 assert "dummy1" == submission1 22 assert submission2 == "dummy1" 23 24 def test_construct_failure(self): 25 message = "Exactly one of `id`, `url`, or `_data` must be provided." 26 with pytest.raises(TypeError) as excinfo: 27 Submission(self.reddit) 28 assert str(excinfo.value) == message 29 30 with pytest.raises(TypeError) as excinfo: 31 Submission(self.reddit, id="dummy", url="dummy") 32 assert str(excinfo.value) == message 33 34 with pytest.raises(TypeError) as excinfo: 35 Submission(self.reddit, "dummy", _data={"id": "dummy"}) 36 assert str(excinfo.value) == message 37 38 with pytest.raises(TypeError) as excinfo: 39 Submission(self.reddit, url="dummy", _data={"id": "dummy"}) 40 assert str(excinfo.value) == message 41 42 with pytest.raises(TypeError) as excinfo: 43 Submission(self.reddit, "dummy", "dummy", {"id": "dummy"}) 44 assert str(excinfo.value) == message 45 46 def test_construct_from_url(self): 47 assert Submission(self.reddit, url="http://my.it/2gmzqe") == "2gmzqe" 48 49 def test_fullname(self): 50 submission = Submission(self.reddit, _data={"id": "dummy"}) 51 assert submission.fullname == "t3_dummy" 52 53 def test_hash(self): 54 submission1 = Submission(self.reddit, _data={"id": "dummy1", "n": 1}) 55 submission2 = Submission(self.reddit, _data={"id": "Dummy1", "n": 2}) 56 submission3 = Submission(self.reddit, _data={"id": "dummy3", "n": 2}) 57 assert hash(submission1) == hash(submission1) 58 assert hash(submission2) == hash(submission2) 59 assert hash(submission3) == hash(submission3) 60 assert hash(submission1) == hash(submission2) 61 assert hash(submission2) != hash(submission3) 62 assert hash(submission1) != hash(submission3) 63 64 def test_id_from_url(self): 65 urls = [ 66 "http://my.it/2gmzqe", 67 "https://redd.it/2gmzqe", 68 "https://redd.it/2gmzqe/", 69 "http://reddit.com/comments/2gmzqe", 70 "https://www.reddit.com/r/redditdev/comments/2gmzqe/" 71 "praw_https_enabled_praw_testing_needed/", 72 ] 73 for url in urls: 74 assert Submission.id_from_url(url) == "2gmzqe", url 75 76 def test_id_from_url__invalid_urls(self): 77 urls = [ 78 "", 79 "1", 80 "/", 81 "my.it/2gmzqe", 82 "http://my.it/_", 83 "https://redd.it/_/", 84 "http://reddit.com/comments/_/2gmzqe", 85 "https://reddit.com/r/wallpapers/", 86 "https://reddit.com/r/wallpapers", 87 ] 88 for url in urls: 89 with pytest.raises(ClientException): 90 Submission.id_from_url(url) 91 92 def test_pickle(self): 93 submission = Submission(self.reddit, _data={"id": "dummy"}) 94 for level in range(pickle.HIGHEST_PROTOCOL + 1): 95 other = pickle.loads(pickle.dumps(submission, protocol=level)) 96 assert submission == other 97 98 def test_repr(self): 99 submission = Submission(self.reddit, id="2gmzqe") 100 assert repr(submission) == "Submission(id='2gmzqe')" 101 102 def test_str(self): 103 submission = Submission(self.reddit, _data={"id": "dummy"}) 104 assert str(submission) == "dummy" 105 106 def test_shortlink(self): 107 submission = Submission(self.reddit, _data={"id": "dummy"}) 108 assert submission.shortlink == "https://redd.it/dummy" 109