vk_music 1.1.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +9 -7
- data/Rakefile +5 -0
- data/lib/vk_music.rb +3 -3
- data/lib/vk_music/audio.rb +143 -79
- data/lib/vk_music/client.rb +543 -250
- data/lib/vk_music/constants.rb +78 -33
- data/lib/vk_music/exceptions.rb +14 -17
- data/lib/vk_music/link_decoder.rb +9 -5
- data/lib/vk_music/playlist.rb +47 -36
- data/lib/vk_music/utility.rb +57 -19
- data/test/test_attached_audios_amount.rb +82 -0
- data/test/test_audios.rb +92 -0
- data/test/test_find.rb +43 -0
- data/test/test_from_id.rb +61 -0
- data/test/test_last_post_id.rb +46 -0
- data/test/test_login.rb +1 -1
- data/test/test_page_id.rb +113 -0
- data/test/test_playlist.rb +39 -10
- data/test/test_post.rb +21 -19
- data/test/test_wall.rb +56 -0
- data/vk_music.gemspec +4 -2
- metadata +31 -11
- data/test/test_audios_by_id.rb +0 -49
- data/test/test_get_id.rb +0 -113
- data/test/test_search.rb +0 -30
- data/test/test_user_or_group_audios.rb +0 -77
@@ -0,0 +1,82 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require_relative "../lib/vk_music.rb"
|
3
|
+
|
4
|
+
begin
|
5
|
+
CLIENT = VkMusic::Client.new(username: ARGV[0], password: ARGV[1])
|
6
|
+
rescue VkMusic::LoginError
|
7
|
+
puts "Unable to login! Please check provided credetionals"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestVkMusic < MiniTest::Test
|
12
|
+
|
13
|
+
# NOTICE: This method is indirectly tested in test_post.rb
|
14
|
+
|
15
|
+
def test_simple
|
16
|
+
re = CLIENT.attached_audios_amount("https://vk.com/wall-184089233_6")
|
17
|
+
assert_equal(1, re, "This post got only 1 attached audio")
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_empty
|
21
|
+
re = CLIENT.attached_audios_amount("https://vk.com/wall-184089233_2")
|
22
|
+
assert_equal(0, re, "This post got no attached audios")
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_single_audio
|
26
|
+
re = CLIENT.attached_audios_amount("https://vk.com/wall-184089233_6")
|
27
|
+
assert_equal(1, re, "This post got only 1 attached audio")
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_single_audio_with_options
|
31
|
+
re = CLIENT.attached_audios_amount(owner_id: -184089233, post_id: 6)
|
32
|
+
assert_equal(1, re, "This post got only 1 attached audio")
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_no_audio
|
36
|
+
re = CLIENT.attached_audios_amount("https://vk.com/wall-184089233_2")
|
37
|
+
assert_equal(0, re, "This post got no attached audios")
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_url_to_reply
|
41
|
+
re = CLIENT.attached_audios_amount("https://m.vk.com/wall-4790861_10108")
|
42
|
+
assert_equal(1, re, "Although this link redirects to comment, audios from post must be parsed")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_playlist
|
46
|
+
re = CLIENT.attached_audios_amount("vk.com/wall-184089233_4")
|
47
|
+
assert_equal(0, re, "This post got no attached audios")
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_comments_with_audios
|
51
|
+
re = CLIENT.attached_audios_amount("https://m.vk.com/wall-39786657_189247")
|
52
|
+
assert_equal(1, re, "This post got 1 attached audio")
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_repost_with_no_audios
|
56
|
+
re = CLIENT.attached_audios_amount("https://vk.com/wall-184936953_1")
|
57
|
+
assert_equal(0, re, "This post got no attached audios")
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_repost_with_audios
|
61
|
+
re = CLIENT.attached_audios_amount("https://vk.com/wall-184936953_2")
|
62
|
+
assert_equal(1, re, "This post got 1 attached audio")
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_repost_with_playlist
|
66
|
+
re = CLIENT.attached_audios_amount("https://vk.com/wall-184936953_3")
|
67
|
+
assert_equal(0, re, "This post got no attached audios")
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_bad_url
|
71
|
+
assert_raises(ArgumentError) do
|
72
|
+
CLIENT.attached_audios_amount("ae")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_nonexistent_post
|
77
|
+
assert_raises(VkMusic::ParseError) do
|
78
|
+
CLIENT.attached_audios_amount("https://m.vk.com/wall-4790861_1052600000")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
data/test/test_audios.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require_relative "../lib/vk_music.rb"
|
3
|
+
|
4
|
+
begin
|
5
|
+
CLIENT = VkMusic::Client.new(username: ARGV[0], password: ARGV[1])
|
6
|
+
rescue VkMusic::LoginError
|
7
|
+
puts "Unable to login! Please check provided credetionals"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestVkMusic < MiniTest::Test
|
12
|
+
|
13
|
+
def test_user
|
14
|
+
pl = CLIENT.audios(owner_id: 8024985)
|
15
|
+
assert_instance_of(VkMusic::Playlist, pl, "User audios must be returned as a playlist (cause it is actually is playlist)")
|
16
|
+
refute_empty(pl, "There must be some music")
|
17
|
+
assert_instance_of(VkMusic::Audio, pl[0], "Results must be of class Audio")
|
18
|
+
refute_empty(pl[0].url, "Audio must have download url")
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_user_without_url
|
22
|
+
pl = CLIENT.audios("vk.com/id8024985", with_url: false)
|
23
|
+
assert_instance_of(VkMusic::Playlist, pl, "User audios must be returned as a playlist (cause it is actually is playlist)")
|
24
|
+
refute_empty(pl, "There must be some music")
|
25
|
+
assert_instance_of(VkMusic::Audio, pl[0], "Results must be of class Audio")
|
26
|
+
assert(pl[0].url_accessable?, "Audio must have all the data needed for getting download URL")
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_user_by_audios_url
|
30
|
+
pl = CLIENT.audios("https://m.vk.com/audios8024985")
|
31
|
+
refute_empty(pl, "This user got audios")
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_incorrect_id
|
35
|
+
assert_raises(VkMusic::ParseError) do
|
36
|
+
CLIENT.audios(owner_id: 42424242424242424242424242)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_user_with_locked_audios
|
41
|
+
assert_raises(VkMusic::ParseError) do
|
42
|
+
CLIENT.audios(owner_id: 152719703)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_user_with_empty_audios
|
47
|
+
pl = CLIENT.audios(owner_id: 437727675)
|
48
|
+
assert_empty(pl, "This user got no audios")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_group
|
52
|
+
pl = CLIENT.audios(owner_id: -4790861)
|
53
|
+
refute_empty(pl, "There must be some music")
|
54
|
+
refute_nil(pl[0].url, "Audio must have download url")
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_group_with_upper_limit_1
|
58
|
+
pl = CLIENT.audios(owner_id: -72589944, up_to: 10)
|
59
|
+
assert_equal(10, pl.length, "Size of result must match given limit") # This group got more audios
|
60
|
+
refute_nil(pl[0].url, "Audio must have download url")
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_group_with_upper_limit_2
|
64
|
+
pl = CLIENT.audios(owner_id: -72589944, up_to: 111, with_url: true)
|
65
|
+
assert_equal(111, pl.size, "Size of result must match given limit")
|
66
|
+
refute_nil(pl[0].url, "Audio must have download url")
|
67
|
+
#refute_nil(pl[-1].url, "Audio must have download url") # Won't have link cause of VK restrictions
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_group_with_upper_limit_3
|
71
|
+
pl = CLIENT.audios(owner_id: -39786657, up_to: 1000, with_url: false)
|
72
|
+
assert_equal(1000, pl.size, "Size of result must match given limit") # NOTICE: VK restrictions
|
73
|
+
assert(pl[0].url_accessable?, "Audio must have all the data needed for getting download URL")
|
74
|
+
assert(pl[-1].url_accessable?, "Audio must have all the data needed for getting download URL")
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_group_with_no_audios
|
78
|
+
pl = CLIENT.audios("vk.com/club52298374")
|
79
|
+
assert_empty(pl, "This group got no audios")
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_group_by_custom_id
|
83
|
+
pl = CLIENT.audios("vk.com/mashup")
|
84
|
+
refute_empty(pl, "This group got audios")
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_group_by_audios_url
|
88
|
+
pl = CLIENT.audios("https://m.vk.com/audios-39786657")
|
89
|
+
refute_empty(pl, "This group got audios")
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
data/test/test_find.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require_relative "../lib/vk_music.rb"
|
3
|
+
|
4
|
+
begin
|
5
|
+
CLIENT = VkMusic::Client.new(username: ARGV[0], password: ARGV[1])
|
6
|
+
rescue VkMusic::LoginError
|
7
|
+
puts "Unable to login! Please check provided credetionals"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestVkMusic < MiniTest::Test
|
12
|
+
|
13
|
+
def test_find
|
14
|
+
results = CLIENT.find("Rick Astley")
|
15
|
+
refute_empty(results, "There must be some music of Rick Astley")
|
16
|
+
assert_instance_of(VkMusic::Audio, results[0], "Results of search must be of class Audio")
|
17
|
+
refute_nil(results[0].url, "Audio must have download url")
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_find_no_query
|
21
|
+
results = CLIENT.find("")
|
22
|
+
assert_empty(results, "There must be no results for empty query")
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_find_no_results
|
26
|
+
results = CLIENT.find("I'm pretty sure no one ever would name a song like this 282E8EE")
|
27
|
+
assert_empty(results, "There must be no results for such query")
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_search_with_hash
|
31
|
+
results = CLIENT.search(query: "Sexualizer")
|
32
|
+
refute_empty(results, "There must be some good music")
|
33
|
+
assert_instance_of(VkMusic::Audio, results[0], "Results of search must be of class Audio")
|
34
|
+
refute_nil(results[0].url, "Audio must have download url")
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_find_bad_arg
|
38
|
+
assert_raises(ArgumentError) do
|
39
|
+
CLIENT.search("Good music", query: "or not")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require_relative "../lib/vk_music.rb"
|
3
|
+
|
4
|
+
begin
|
5
|
+
CLIENT = VkMusic::Client.new(username: ARGV[0], password: ARGV[1])
|
6
|
+
rescue VkMusic::LoginError
|
7
|
+
puts "Unable to login! Please check provided credetionals"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestVkMusic < MiniTest::Test
|
12
|
+
|
13
|
+
def test_one_id
|
14
|
+
results = CLIENT.from_id([
|
15
|
+
"2000202604_456242434_32f6f3df29dc8e9c71_82fbafed15ef65709b"
|
16
|
+
])
|
17
|
+
refute_empty(results, "There must be some music")
|
18
|
+
assert_instance_of(Array, results, "Result must be an Array")
|
19
|
+
assert_instance_of(VkMusic::Audio, results[0], "Results of search must be of class Audio")
|
20
|
+
refute_nil(results[0].url, "Audio must have download url")
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_two_id
|
24
|
+
results = CLIENT.from_id([
|
25
|
+
"2000202604_456242434_32f6f3df29dc8e9c71_82fbafed15ef65709b",
|
26
|
+
["2000023175", "456242595", "addd832f78d7c61b6d", "b6b14f49280d4d55f0"]
|
27
|
+
])
|
28
|
+
assert_equal(2, results.size, "There must be 2 audios")
|
29
|
+
refute_nil(results[1].url, "Audio must have download url")
|
30
|
+
end
|
31
|
+
|
32
|
+
# TODO: test with many audios
|
33
|
+
|
34
|
+
def test_bad_last
|
35
|
+
assert_raises(VkMusic::ParseError) do
|
36
|
+
CLIENT.from_id([
|
37
|
+
"2000202604_456242434_32f6f3df29dc8e9c71_82fbafed15ef65709b",
|
38
|
+
["42", "1337", "aaaa", "aaaaaa"]
|
39
|
+
])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_bad_first
|
44
|
+
assert_raises(VkMusic::ParseError) do
|
45
|
+
CLIENT.from_id([
|
46
|
+
["42", "1337", "aaaa", "aaaaaa"],
|
47
|
+
"2000202604_456242434_32f6f3df29dc8e9c71_82fbafed15ef65709b"
|
48
|
+
])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_bad_all
|
53
|
+
assert_raises(VkMusic::ParseError) do
|
54
|
+
CLIENT.from_id([
|
55
|
+
["42", "1337", "aaaa", "aaaaaa"],
|
56
|
+
"123_123_123_123"
|
57
|
+
])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require_relative "../lib/vk_music.rb"
|
3
|
+
|
4
|
+
begin
|
5
|
+
CLIENT = VkMusic::Client.new(username: ARGV[0], password: ARGV[1])
|
6
|
+
rescue VkMusic::LoginError
|
7
|
+
puts "Unable to login! Please check provided credetionals"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestVkMusic < MiniTest::Test
|
12
|
+
|
13
|
+
def test_empty_group
|
14
|
+
re = CLIENT.last_post_id("https://vk.com/club185224844")
|
15
|
+
assert_nil(re, "This group is empty")
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_not_empty_group
|
19
|
+
re = CLIENT.last_post_id("https://vk.com/mashup")
|
20
|
+
refute_nil(re, "This group is not empty")
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_not_empty_user
|
24
|
+
re = CLIENT.last_post_id("https://vk.com/id1")
|
25
|
+
refute_nil(re, "This user got posts")
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_bad_url_1
|
29
|
+
assert_raises(VkMusic::ParseError) do
|
30
|
+
CLIENT.last_post_id("https://vk.com/id10000000000000")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_bad_url_2
|
35
|
+
assert_raises(VkMusic::ParseError) do
|
36
|
+
CLIENT.last_post_id("https://vk.com/feed")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_bad_url_3
|
41
|
+
assert_raises(ArgumentError) do
|
42
|
+
CLIENT.last_post_id("https://vk.com/id0")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/test/test_login.rb
CHANGED
@@ -22,7 +22,7 @@ class TestVkMusic < MiniTest::Test
|
|
22
22
|
puts "Unable to login! Please check provided credetionals"
|
23
23
|
end
|
24
24
|
refute_nil(client, "Client not defined")
|
25
|
-
|
25
|
+
refute_empty(client.name, "User name undefined")
|
26
26
|
refute_nil(client.id, "User id undefined")
|
27
27
|
end
|
28
28
|
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require_relative "../lib/vk_music.rb"
|
3
|
+
|
4
|
+
begin
|
5
|
+
CLIENT = VkMusic::Client.new(username: ARGV[0], password: ARGV[1])
|
6
|
+
rescue VkMusic::LoginError
|
7
|
+
puts "Unable to login! Please check provided credetionals"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestVkMusic < MiniTest::Test
|
12
|
+
|
13
|
+
def test_user_link_with_id
|
14
|
+
id = CLIENT.page_id("https://vk.com/id51842614")
|
15
|
+
assert_equal(51842614, id, "Ids don't match")
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_user_custom_link
|
19
|
+
id = CLIENT.page_id("https://vk.com/kopatych56")
|
20
|
+
assert_equal(51842614, id, "Ids don't match")
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_user_custom
|
24
|
+
id = CLIENT.page_id("kopatych56")
|
25
|
+
assert_equal(51842614, id, "Ids don't match")
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_user_id
|
29
|
+
id = CLIENT.page_id("51842614")
|
30
|
+
assert_equal(51842614, id, "Ids don't match")
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_user_id_with_prefix
|
34
|
+
id = CLIENT.page_id("id51842614")
|
35
|
+
assert_equal(51842614, id, "Ids don't match")
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_user_audios
|
39
|
+
id = CLIENT.page_id("https://vk.com/audios51842614")
|
40
|
+
assert_equal(51842614, id, "Ids don't match")
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
def test_group_link_with_id
|
45
|
+
id = CLIENT.page_id("https://vk.com/public39786657")
|
46
|
+
assert_equal(-39786657, id, "Ids don't match")
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_group_custom_link
|
50
|
+
id = CLIENT.page_id("https://vk.com/mashup")
|
51
|
+
assert_equal(-39786657, id, "Ids don't match")
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_group_custom
|
55
|
+
id = CLIENT.page_id("mashup")
|
56
|
+
assert_equal(-39786657, id, "Ids don't match")
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_group_id
|
60
|
+
id = CLIENT.page_id("-39786657")
|
61
|
+
assert_equal(-39786657, id, "Ids don't match")
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_group_id_with_prefix
|
65
|
+
id = CLIENT.page_id("public39786657")
|
66
|
+
assert_equal(-39786657, id, "Ids don't match")
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_group_audios
|
70
|
+
id = CLIENT.page_id("https://vk.com/audios-39786657")
|
71
|
+
assert_equal(-39786657, id, "Ids don't match")
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
def test_user_deleted
|
76
|
+
id = CLIENT.page_id("https://vk.com/id245722576")
|
77
|
+
assert_equal(245722576, id, "Ids don't match")
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_user_no_photos
|
81
|
+
id = CLIENT.page_id("drop_the_treble")
|
82
|
+
assert_equal(437727675, id, "Ids don't match")
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_user_private
|
86
|
+
id = CLIENT.page_id("poppingeyesocketcherry") # I hope this guy won't change his custom
|
87
|
+
assert_equal(300415, id, "Ids don't match")
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_group_no_photos
|
91
|
+
id = CLIENT.page_id("vk.com/opentestroom")
|
92
|
+
assert_equal(-184089233, id, "Ids don't match")
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_bad_url
|
96
|
+
assert_raises(VkMusic::ParseError) do
|
97
|
+
CLIENT.page_id("https://vk.com/feed")
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_bad_custom
|
102
|
+
assert_raises(VkMusic::ParseError) do
|
103
|
+
CLIENT.page_id("a")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_empty
|
108
|
+
assert_raises(VkMusic::ParseError) do
|
109
|
+
CLIENT.page_id("")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|