nexus_mods 0.1.1 → 0.2.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/CHANGELOG.md +6 -0
- data/lib/nexus_mods/api/api_limits.rb +64 -0
- data/lib/nexus_mods/api/category.rb +54 -0
- data/lib/nexus_mods/api/game.rb +106 -0
- data/lib/nexus_mods/api/mod.rb +141 -0
- data/lib/nexus_mods/api/mod_file.rb +116 -0
- data/lib/nexus_mods/api/user.rb +55 -0
- data/lib/nexus_mods/version.rb +1 -1
- data/lib/nexus_mods.rb +12 -12
- data/spec/nexus_mods_test/factories/games.rb +135 -0
- data/spec/nexus_mods_test/factories/mod_files.rb +113 -0
- data/spec/nexus_mods_test/factories/mods.rb +144 -0
- data/spec/nexus_mods_test/helpers.rb +32 -14
- data/spec/nexus_mods_test/scenarios/nexus_mods/{api_limits_spec.rb → api/api_limits_spec.rb} +10 -3
- data/spec/nexus_mods_test/scenarios/nexus_mods/api/game_spec.rb +93 -0
- data/spec/nexus_mods_test/scenarios/nexus_mods/api/mod_file_spec.rb +73 -0
- data/spec/nexus_mods_test/scenarios/nexus_mods/api/mod_spec.rb +62 -0
- metadata +16 -13
- data/lib/nexus_mods/api_limits.rb +0 -44
- data/lib/nexus_mods/category.rb +0 -37
- data/lib/nexus_mods/game.rb +0 -78
- data/lib/nexus_mods/mod.rb +0 -106
- data/lib/nexus_mods/mod_file.rb +0 -86
- data/lib/nexus_mods/user.rb +0 -37
- data/spec/nexus_mods_test/scenarios/nexus_mods/game_spec.rb +0 -180
- data/spec/nexus_mods_test/scenarios/nexus_mods/mod_file_spec.rb +0 -140
- data/spec/nexus_mods_test/scenarios/nexus_mods/mod_spec.rb +0 -185
@@ -0,0 +1,135 @@
|
|
1
|
+
module NexusModsTest
|
2
|
+
|
3
|
+
module Factories
|
4
|
+
|
5
|
+
module Games
|
6
|
+
|
7
|
+
# Test game with id 100
|
8
|
+
def json_game100
|
9
|
+
{
|
10
|
+
'id' => 100,
|
11
|
+
'name' => 'Morrowind',
|
12
|
+
'forum_url' => 'https://forums.nexusmods.com/index.php?/forum/111-morrowind/',
|
13
|
+
'nexusmods_url' => 'http://www.nexusmods.com/morrowind',
|
14
|
+
'genre' => 'RPG',
|
15
|
+
'file_count' => 14_143,
|
16
|
+
'downloads' => 20_414_985,
|
17
|
+
'domain_name' => 'morrowind',
|
18
|
+
'approved_date' => 1,
|
19
|
+
'file_views' => 100_014_750,
|
20
|
+
'authors' => 2062,
|
21
|
+
'file_endorsements' => 719_262,
|
22
|
+
'mods' => 6080,
|
23
|
+
'categories' => [
|
24
|
+
{
|
25
|
+
'category_id' => 1,
|
26
|
+
'name' => 'Morrowind',
|
27
|
+
'parent_category' => false
|
28
|
+
},
|
29
|
+
{
|
30
|
+
'category_id' => 2,
|
31
|
+
'name' => 'Buildings',
|
32
|
+
'parent_category' => 1
|
33
|
+
}
|
34
|
+
]
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
# Test game with id 101
|
39
|
+
def json_game101
|
40
|
+
{
|
41
|
+
'id' => 101,
|
42
|
+
'name' => 'Oblivion',
|
43
|
+
'forum_url' => 'https://forums.nexusmods.com/index.php?/forum/131-oblivion/',
|
44
|
+
'nexusmods_url' => 'http://www.nexusmods.com/oblivion',
|
45
|
+
'genre' => 'RPG',
|
46
|
+
'file_count' => 52_775,
|
47
|
+
'downloads' => 187_758_634,
|
48
|
+
'domain_name' => 'oblivion',
|
49
|
+
'approved_date' => 1,
|
50
|
+
'file_views' => 880_508_188,
|
51
|
+
'authors' => 10_673,
|
52
|
+
'file_endorsements' => 4_104_067,
|
53
|
+
'mods' => 29_220,
|
54
|
+
'categories' => [
|
55
|
+
{
|
56
|
+
'category_id' => 20,
|
57
|
+
'name' => 'Oblivion',
|
58
|
+
'parent_category' => false
|
59
|
+
},
|
60
|
+
{
|
61
|
+
'category_id' => 22,
|
62
|
+
'name' => 'New structures - Buildings',
|
63
|
+
'parent_category' => 20
|
64
|
+
}
|
65
|
+
]
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
# Expect a game to be the test game of id 100
|
70
|
+
#
|
71
|
+
# Parameters::
|
72
|
+
# * *game* (NexusMods::Api::Game): Game to validate
|
73
|
+
def expect_game_to_be_game100(game)
|
74
|
+
expect(game.id).to eq 100
|
75
|
+
expect(game.name).to eq 'Morrowind'
|
76
|
+
expect(game.forum_url).to eq 'https://forums.nexusmods.com/index.php?/forum/111-morrowind/'
|
77
|
+
expect(game.nexusmods_url).to eq 'http://www.nexusmods.com/morrowind'
|
78
|
+
expect(game.genre).to eq 'RPG'
|
79
|
+
expect(game.files_count).to eq 14_143
|
80
|
+
expect(game.downloads_count).to eq 20_414_985
|
81
|
+
expect(game.domain_name).to eq 'morrowind'
|
82
|
+
expect(game.approved_date).to eq Time.parse('1970-01-01 00:00:01 +0000')
|
83
|
+
expect(game.files_views).to eq 100_014_750
|
84
|
+
expect(game.authors_count).to eq 2062
|
85
|
+
expect(game.files_endorsements).to eq 719_262
|
86
|
+
expect(game.mods_count).to eq 6080
|
87
|
+
game_categories = game.categories
|
88
|
+
expect(game_categories.size).to eq 2
|
89
|
+
expect(game_categories.first.id).to eq 1
|
90
|
+
expect(game_categories.first.name).to eq 'Morrowind'
|
91
|
+
expect(game_categories.first.parent_category).to be_nil
|
92
|
+
expect(game_categories[1].id).to eq 2
|
93
|
+
expect(game_categories[1].name).to eq 'Buildings'
|
94
|
+
expect(game_categories[1].parent_category).not_to be_nil
|
95
|
+
expect(game_categories[1].parent_category.id).to eq 1
|
96
|
+
expect(game_categories[1].parent_category.name).to eq 'Morrowind'
|
97
|
+
expect(game_categories[1].parent_category.parent_category).to be_nil
|
98
|
+
end
|
99
|
+
|
100
|
+
# Expect a game to be the test game of id 101
|
101
|
+
#
|
102
|
+
# Parameters::
|
103
|
+
# * *game* (NexusMods::Api::Game): Game to validate
|
104
|
+
def expect_game_to_be_game101(game)
|
105
|
+
expect(game.id).to eq 101
|
106
|
+
expect(game.name).to eq 'Oblivion'
|
107
|
+
expect(game.forum_url).to eq 'https://forums.nexusmods.com/index.php?/forum/131-oblivion/'
|
108
|
+
expect(game.nexusmods_url).to eq 'http://www.nexusmods.com/oblivion'
|
109
|
+
expect(game.genre).to eq 'RPG'
|
110
|
+
expect(game.files_count).to eq 52_775
|
111
|
+
expect(game.downloads_count).to eq 187_758_634
|
112
|
+
expect(game.domain_name).to eq 'oblivion'
|
113
|
+
expect(game.approved_date).to eq Time.parse('1970-01-01 00:00:01 +0000')
|
114
|
+
expect(game.files_views).to eq 880_508_188
|
115
|
+
expect(game.authors_count).to eq 10_673
|
116
|
+
expect(game.files_endorsements).to eq 4_104_067
|
117
|
+
expect(game.mods_count).to eq 29_220
|
118
|
+
game_categories = game.categories
|
119
|
+
expect(game_categories.size).to eq 2
|
120
|
+
expect(game_categories.first.id).to eq 20
|
121
|
+
expect(game_categories.first.name).to eq 'Oblivion'
|
122
|
+
expect(game_categories.first.parent_category).to be_nil
|
123
|
+
expect(game_categories[1].id).to eq 22
|
124
|
+
expect(game_categories[1].name).to eq 'New structures - Buildings'
|
125
|
+
expect(game_categories[1].parent_category).not_to be_nil
|
126
|
+
expect(game_categories[1].parent_category.id).to eq 20
|
127
|
+
expect(game_categories[1].parent_category.name).to eq 'Oblivion'
|
128
|
+
expect(game_categories[1].parent_category.parent_category).to be_nil
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
module NexusModsTest
|
2
|
+
|
3
|
+
module Factories
|
4
|
+
|
5
|
+
module ModFiles
|
6
|
+
|
7
|
+
# Test mod file with id 2472
|
8
|
+
def json_mod_file2472
|
9
|
+
{
|
10
|
+
'id' => [
|
11
|
+
2472,
|
12
|
+
1704
|
13
|
+
],
|
14
|
+
'uid' => 7_318_624_274_856,
|
15
|
+
'file_id' => 2472,
|
16
|
+
'name' => 'ApachiiSkyHair_v_1_6_Full',
|
17
|
+
'version' => '1.6.Full',
|
18
|
+
'category_id' => 4,
|
19
|
+
'category_name' => 'OLD_VERSION',
|
20
|
+
'is_primary' => false,
|
21
|
+
'file_name' => 'ApachiiSkyHair_v_1_6_Full-2014-1-6-Full.7z',
|
22
|
+
'uploaded_timestamp' => 1_477_967_645,
|
23
|
+
'uploaded_time' => '2016-11-01T02:34:05.000+00:00',
|
24
|
+
'mod_version' => '1.6.Full',
|
25
|
+
'external_virus_scan_url' => 'https://www.virustotal.com/file/3dcc96dce0b846ea643d626c48bd6ad08752da8232f3d29be644d36e1fd627cf/analysis/1477978674/',
|
26
|
+
'description' => '[b][color=orange] NOT optimized meshes. Standalone. Adds 42 new hairstyles for females, 21 hair for males and 5 hairs for Female Khajiit- 2 hairs for Male Khajiit[/color][/b] ',
|
27
|
+
'size' => 304_347,
|
28
|
+
'size_kb' => 304_347,
|
29
|
+
'size_in_bytes' => 309_251_227,
|
30
|
+
'changelog_html' => nil,
|
31
|
+
'content_preview_link' => 'https://file-metadata.nexusmods.com/file/nexus-files-meta/1704/2014/ApachiiSkyHair_v_1_6_Full-2014-1-6-Full.7z.json'
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
# Test mod file with id 2487
|
36
|
+
def json_mod_file2487
|
37
|
+
{
|
38
|
+
'id' => [
|
39
|
+
2487,
|
40
|
+
1705
|
41
|
+
],
|
42
|
+
'uid' => 7_318_624_274_857,
|
43
|
+
'file_id' => 2487,
|
44
|
+
'name' => 'ApachiiSkyHairMale_v_1_2',
|
45
|
+
'version' => '1.2',
|
46
|
+
'category_id' => 4,
|
47
|
+
'category_name' => 'OLD_VERSION',
|
48
|
+
'is_primary' => false,
|
49
|
+
'file_name' => 'ApachiiSkyHairMale_v_1_2-2014-1-2.7z',
|
50
|
+
'uploaded_timestamp' => 1_477_968_373,
|
51
|
+
'uploaded_time' => '2016-11-01T02:46:13.000+00:00',
|
52
|
+
'mod_version' => '1.2',
|
53
|
+
'external_virus_scan_url' => 'https://www.virustotal.com/file/3e86106233499ac43383c32ce4a2d8e162dc6e940b4d228f649a701b71ee5676/analysis/1477979366/',
|
54
|
+
'description' => 'NOT optimezed meshes. Standalone 55 Male hairs - Not included in ApachiiSkyHair v_1_6_Full ',
|
55
|
+
'size' => 204_347,
|
56
|
+
'size_kb' => 204_347,
|
57
|
+
'size_in_bytes' => 209_251_227,
|
58
|
+
'changelog_html' => nil,
|
59
|
+
'content_preview_link' => 'https://file-metadata.nexusmods.com/file/nexus-files-meta/1704/2014/ApachiiSkyHairMale_v_1_2-2014-1-2.7z.json'
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
# Expect a mod's file to be the example one with id 2472
|
64
|
+
#
|
65
|
+
# Parameters::
|
66
|
+
# * *mod_file* (NexusMods::Api::File): Mod file to validate
|
67
|
+
def expect_mod_file_to_be2472(mod_file)
|
68
|
+
expect(mod_file.ids).to eq [2472, 1704]
|
69
|
+
expect(mod_file.uid).to eq 7_318_624_274_856
|
70
|
+
expect(mod_file.id).to eq 2472
|
71
|
+
expect(mod_file.name).to eq 'ApachiiSkyHair_v_1_6_Full'
|
72
|
+
expect(mod_file.version).to eq '1.6.Full'
|
73
|
+
expect(mod_file.category_id).to eq :old
|
74
|
+
expect(mod_file.category_name).to eq 'OLD_VERSION'
|
75
|
+
expect(mod_file.is_primary).to be false
|
76
|
+
expect(mod_file.size).to eq 309_251_227
|
77
|
+
expect(mod_file.file_name).to eq 'ApachiiSkyHair_v_1_6_Full-2014-1-6-Full.7z'
|
78
|
+
expect(mod_file.uploaded_time).to eq Time.parse('2016-11-01T02:34:05.000+00:00')
|
79
|
+
expect(mod_file.mod_version).to eq '1.6.Full'
|
80
|
+
expect(mod_file.external_virus_scan_url).to eq 'https://www.virustotal.com/file/3dcc96dce0b846ea643d626c48bd6ad08752da8232f3d29be644d36e1fd627cf/analysis/1477978674/'
|
81
|
+
expect(mod_file.description).to eq '[b][color=orange] NOT optimized meshes. Standalone. Adds 42 new hairstyles for females, 21 hair for males and 5 hairs for Female Khajiit- 2 hairs for Male Khajiit[/color][/b] '
|
82
|
+
expect(mod_file.changelog_html).to be_nil
|
83
|
+
expect(mod_file.content_preview_url).to eq 'https://file-metadata.nexusmods.com/file/nexus-files-meta/1704/2014/ApachiiSkyHair_v_1_6_Full-2014-1-6-Full.7z.json'
|
84
|
+
end
|
85
|
+
|
86
|
+
# Expect a mod's file to be the example one with id 2487
|
87
|
+
#
|
88
|
+
# Parameters::
|
89
|
+
# * *mod_file* (NexusMods::Api::File): Mod file to validate
|
90
|
+
def expect_mod_file_to_be2487(mod_file)
|
91
|
+
expect(mod_file.ids).to eq [2487, 1705]
|
92
|
+
expect(mod_file.uid).to eq 7_318_624_274_857
|
93
|
+
expect(mod_file.id).to eq 2487
|
94
|
+
expect(mod_file.name).to eq 'ApachiiSkyHairMale_v_1_2'
|
95
|
+
expect(mod_file.version).to eq '1.2'
|
96
|
+
expect(mod_file.category_id).to eq :old
|
97
|
+
expect(mod_file.category_name).to eq 'OLD_VERSION'
|
98
|
+
expect(mod_file.is_primary).to be false
|
99
|
+
expect(mod_file.size).to eq 209_251_227
|
100
|
+
expect(mod_file.file_name).to eq 'ApachiiSkyHairMale_v_1_2-2014-1-2.7z'
|
101
|
+
expect(mod_file.uploaded_time).to eq Time.parse('2016-11-01T02:46:13.000+00:00')
|
102
|
+
expect(mod_file.mod_version).to eq '1.2'
|
103
|
+
expect(mod_file.external_virus_scan_url).to eq 'https://www.virustotal.com/file/3e86106233499ac43383c32ce4a2d8e162dc6e940b4d228f649a701b71ee5676/analysis/1477979366/'
|
104
|
+
expect(mod_file.description).to eq 'NOT optimezed meshes. Standalone 55 Male hairs - Not included in ApachiiSkyHair v_1_6_Full '
|
105
|
+
expect(mod_file.changelog_html).to be_nil
|
106
|
+
expect(mod_file.content_preview_url).to eq 'https://file-metadata.nexusmods.com/file/nexus-files-meta/1704/2014/ApachiiSkyHairMale_v_1_2-2014-1-2.7z.json'
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
module NexusModsTest
|
2
|
+
|
3
|
+
module Factories
|
4
|
+
|
5
|
+
module Mods
|
6
|
+
|
7
|
+
# Example of JSON object returned by the API for a mod information, having all possible fields
|
8
|
+
def json_complete_mod
|
9
|
+
{
|
10
|
+
'name' => 'ApachiiSkyHair SSE',
|
11
|
+
'summary' => 'New Female and Male Hairstyles for Humans, Elves and Orcs. Converted hair from Sims2 and Sims3.<br />Standalone version.',
|
12
|
+
'description' => 'Mod description',
|
13
|
+
'picture_url' => 'https://staticdelivery.nexusmods.com/mods/1704/images/10168-1-1392817986.jpg',
|
14
|
+
'mod_downloads' => 13_634_545,
|
15
|
+
'mod_unique_downloads' => 4_052_221,
|
16
|
+
'uid' => 7_318_624_272_650,
|
17
|
+
'mod_id' => 2014,
|
18
|
+
'game_id' => 1704,
|
19
|
+
'allow_rating' => true,
|
20
|
+
'domain_name' => 'skyrimspecialedition',
|
21
|
+
'category_id' => 26,
|
22
|
+
'version' => '1.6.Full',
|
23
|
+
'endorsement_count' => 298_845,
|
24
|
+
'created_timestamp' => 1_477_972_056,
|
25
|
+
'created_time' => '2016-11-01T03:47:36.000+00:00',
|
26
|
+
'updated_timestamp' => 1_507_398_546,
|
27
|
+
'updated_time' => '2017-10-07T17:49:06.000+00:00',
|
28
|
+
'author' => 'Apachii',
|
29
|
+
'uploaded_by' => 'apachii',
|
30
|
+
'uploaded_users_profile_url' => 'http://www.nexusmods.com/games/users/283148',
|
31
|
+
'contains_adult_content' => false,
|
32
|
+
'status' => 'published',
|
33
|
+
'available' => true,
|
34
|
+
'user' => {
|
35
|
+
'member_id' => 283_148,
|
36
|
+
'member_group_id' => 27,
|
37
|
+
'name' => 'apachii'
|
38
|
+
},
|
39
|
+
'endorsement' => {
|
40
|
+
'endorse_status' => 'Undecided',
|
41
|
+
'timestamp' => nil,
|
42
|
+
'version' => nil
|
43
|
+
}
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
# Example of JSON object returned by the API for a mod information, having minimum fields
|
48
|
+
def json_partial_mod
|
49
|
+
{
|
50
|
+
'mod_downloads' => 13_634_545,
|
51
|
+
'mod_unique_downloads' => 4_052_221,
|
52
|
+
'uid' => 7_318_624_272_650,
|
53
|
+
'mod_id' => 2014,
|
54
|
+
'game_id' => 1704,
|
55
|
+
'allow_rating' => true,
|
56
|
+
'domain_name' => 'skyrimspecialedition',
|
57
|
+
'category_id' => 26,
|
58
|
+
'version' => '1.6.Full',
|
59
|
+
'endorsement_count' => 298_845,
|
60
|
+
'created_timestamp' => 1_477_972_056,
|
61
|
+
'created_time' => '2016-11-01T03:47:36.000+00:00',
|
62
|
+
'updated_timestamp' => 1_507_398_546,
|
63
|
+
'updated_time' => '2017-10-07T17:49:06.000+00:00',
|
64
|
+
'author' => 'Apachii',
|
65
|
+
'uploaded_by' => 'apachii',
|
66
|
+
'uploaded_users_profile_url' => 'http://www.nexusmods.com/games/users/283148',
|
67
|
+
'contains_adult_content' => false,
|
68
|
+
'status' => 'published',
|
69
|
+
'available' => true,
|
70
|
+
'user' => {
|
71
|
+
'member_id' => 283_148,
|
72
|
+
'member_group_id' => 27,
|
73
|
+
'name' => 'apachii'
|
74
|
+
}
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
# Expect a mod to be the example complete one
|
79
|
+
#
|
80
|
+
# Parameters::
|
81
|
+
# * *mod* (NexusMods::Api::Mod): Mod to validate
|
82
|
+
def expect_mod_to_be_complete(mod)
|
83
|
+
expect(mod.name).to eq 'ApachiiSkyHair SSE'
|
84
|
+
expect(mod.summary).to eq 'New Female and Male Hairstyles for Humans, Elves and Orcs. Converted hair from Sims2 and Sims3.<br />Standalone version.'
|
85
|
+
expect(mod.description).to eq 'Mod description'
|
86
|
+
expect(mod.picture_url).to eq 'https://staticdelivery.nexusmods.com/mods/1704/images/10168-1-1392817986.jpg'
|
87
|
+
expect(mod.downloads_count).to eq 13_634_545
|
88
|
+
expect(mod.unique_downloads_count).to eq 4_052_221
|
89
|
+
expect(mod.uid).to eq 7_318_624_272_650
|
90
|
+
expect(mod.mod_id).to eq 2014
|
91
|
+
expect(mod.game_id).to eq 1704
|
92
|
+
expect(mod.allow_rating).to be true
|
93
|
+
expect(mod.domain_name).to eq 'skyrimspecialedition'
|
94
|
+
expect(mod.category_id).to eq 26
|
95
|
+
expect(mod.version).to eq '1.6.Full'
|
96
|
+
expect(mod.endorsements_count).to eq 298_845
|
97
|
+
expect(mod.created_time).to eq Time.parse('2016-11-01T03:47:36.000+00:00')
|
98
|
+
expect(mod.updated_time).to eq Time.parse('2017-10-07T17:49:06.000+00:00')
|
99
|
+
expect(mod.author).to eq 'Apachii'
|
100
|
+
expect(mod.contains_adult_content).to be false
|
101
|
+
expect(mod.status).to eq 'published'
|
102
|
+
expect(mod.available).to be true
|
103
|
+
expect(mod.uploader.member_id).to eq 283_148
|
104
|
+
expect(mod.uploader.member_group_id).to eq 27
|
105
|
+
expect(mod.uploader.name).to eq 'apachii'
|
106
|
+
expect(mod.uploader.profile_url).to eq 'http://www.nexusmods.com/games/users/283148'
|
107
|
+
end
|
108
|
+
|
109
|
+
# Expect a mod to be the example partial one
|
110
|
+
#
|
111
|
+
# Parameters::
|
112
|
+
# * *mod* (NexusMods::Api::Mod): Mod to validate
|
113
|
+
def expect_mod_to_be_partial(mod)
|
114
|
+
expect(mod.name).to be_nil
|
115
|
+
expect(mod.summary).to be_nil
|
116
|
+
expect(mod.description).to be_nil
|
117
|
+
expect(mod.picture_url).to be_nil
|
118
|
+
expect(mod.downloads_count).to eq 13_634_545
|
119
|
+
expect(mod.unique_downloads_count).to eq 4_052_221
|
120
|
+
expect(mod.uid).to eq 7_318_624_272_650
|
121
|
+
expect(mod.mod_id).to eq 2014
|
122
|
+
expect(mod.game_id).to eq 1704
|
123
|
+
expect(mod.allow_rating).to be true
|
124
|
+
expect(mod.domain_name).to eq 'skyrimspecialedition'
|
125
|
+
expect(mod.category_id).to eq 26
|
126
|
+
expect(mod.version).to eq '1.6.Full'
|
127
|
+
expect(mod.endorsements_count).to eq 298_845
|
128
|
+
expect(mod.created_time).to eq Time.parse('2016-11-01T03:47:36.000+00:00')
|
129
|
+
expect(mod.updated_time).to eq Time.parse('2017-10-07T17:49:06.000+00:00')
|
130
|
+
expect(mod.author).to eq 'Apachii'
|
131
|
+
expect(mod.contains_adult_content).to be false
|
132
|
+
expect(mod.status).to eq 'published'
|
133
|
+
expect(mod.available).to be true
|
134
|
+
expect(mod.uploader.member_id).to eq 283_148
|
135
|
+
expect(mod.uploader.member_group_id).to eq 27
|
136
|
+
expect(mod.uploader.name).to eq 'apachii'
|
137
|
+
expect(mod.uploader.profile_url).to eq 'http://www.nexusmods.com/games/users/283148'
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
require 'digest'
|
2
2
|
require 'webmock/rspec'
|
3
3
|
require 'rspec/support/object_formatter'
|
4
|
+
require 'nexus_mods_test/factories/games'
|
5
|
+
require 'nexus_mods_test/factories/mods'
|
6
|
+
require 'nexus_mods_test/factories/mod_files'
|
4
7
|
require 'nexus_mods'
|
5
8
|
|
6
|
-
module
|
9
|
+
module NexusModsTest
|
7
10
|
|
8
11
|
module Helpers
|
9
12
|
|
@@ -72,6 +75,7 @@ module NexusModsTests
|
|
72
75
|
# * *message* (String): Mocked returned message [default: 'OK']
|
73
76
|
# * *json* (Object): Mocked JSON body [default: {}]
|
74
77
|
# * *headers* (Hash<String,String>): Mocked additional HTTP headers [default: {}]
|
78
|
+
# * *times* (Integer): Number of times the call is expected [default: 1]
|
75
79
|
def expect_http_call_to(
|
76
80
|
host: 'api.nexusmods.com',
|
77
81
|
http_method: :get,
|
@@ -80,7 +84,8 @@ module NexusModsTests
|
|
80
84
|
code: 200,
|
81
85
|
message: 'OK',
|
82
86
|
json: {},
|
83
|
-
headers: {}
|
87
|
+
headers: {},
|
88
|
+
times: 1
|
84
89
|
)
|
85
90
|
json_as_str = json.to_json
|
86
91
|
mocked_etag = "W/\"#{Digest::MD5.hexdigest("#{path}|#{json_as_str}")}\""
|
@@ -93,19 +98,25 @@ module NexusModsTests
|
|
93
98
|
else
|
94
99
|
@expected_returned_etags << mocked_etag
|
95
100
|
end
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
101
|
+
@expected_stubs << [
|
102
|
+
stub_request(http_method, "https://#{host}#{path}").with(headers: expected_request_headers).to_return(
|
103
|
+
status: [code, message],
|
104
|
+
body: json_as_str,
|
105
|
+
headers: DEFAULT_API_HEADERS.
|
106
|
+
merge(
|
107
|
+
'etag' => mocked_etag
|
108
|
+
).
|
109
|
+
merge(headers)
|
110
|
+
),
|
111
|
+
times
|
112
|
+
]
|
105
113
|
end
|
106
114
|
|
107
115
|
# Expect a successfull call made to validate the user
|
108
|
-
|
116
|
+
#
|
117
|
+
# Parameters::
|
118
|
+
# * *times* (Integer): Number of times the call is expected [default: 1]
|
119
|
+
def expect_validate_user(times: 1)
|
109
120
|
expect_http_call_to(
|
110
121
|
path: '/v1/users/validate.json',
|
111
122
|
json: {
|
@@ -118,7 +129,8 @@ module NexusModsTests
|
|
118
129
|
profile_url: 'https://www.nexusmods.com/Contents/Images/noavatar.gif',
|
119
130
|
is_supporter: false,
|
120
131
|
is_premium: false
|
121
|
-
}
|
132
|
+
},
|
133
|
+
times:
|
122
134
|
)
|
123
135
|
end
|
124
136
|
|
@@ -127,12 +139,18 @@ module NexusModsTests
|
|
127
139
|
end
|
128
140
|
|
129
141
|
RSpec.configure do |config|
|
130
|
-
config.include
|
142
|
+
config.include NexusModsTest::Helpers
|
143
|
+
config.include NexusModsTest::Factories::Games
|
144
|
+
config.include NexusModsTest::Factories::Mods
|
145
|
+
config.include NexusModsTest::Factories::ModFiles
|
131
146
|
config.before do
|
132
147
|
@nexus_mods = nil
|
133
148
|
# Keep a list of the etags we should have returned, so that we know when queries should contain them
|
134
149
|
# Array<String>
|
135
150
|
@expected_returned_etags = []
|
151
|
+
# List of expected stubs and the number of times they were supposed to mock
|
152
|
+
# Array< [ WebMock::RequestStub, Integer ] >
|
153
|
+
@expected_stubs = []
|
136
154
|
end
|
137
155
|
end
|
138
156
|
|
data/spec/nexus_mods_test/scenarios/nexus_mods/{api_limits_spec.rb → api/api_limits_spec.rb}
RENAMED
@@ -1,10 +1,9 @@
|
|
1
|
-
describe NexusMods::ApiLimits do
|
1
|
+
describe NexusMods::Api::ApiLimits do
|
2
2
|
|
3
3
|
context 'when testing API limits' do
|
4
4
|
|
5
5
|
it 'gets api limits' do
|
6
|
-
expect_validate_user
|
7
|
-
expect_validate_user
|
6
|
+
expect_validate_user(times: 2)
|
8
7
|
api_limits = nexus_mods.api_limits
|
9
8
|
expect(api_limits.daily_limit).to eq 2500
|
10
9
|
expect(api_limits.daily_remaining).to eq 2500
|
@@ -14,6 +13,14 @@ describe NexusMods::ApiLimits do
|
|
14
13
|
expect(api_limits.hourly_reset).to eq Time.parse('2019-10-02T16:00:00+00:00')
|
15
14
|
end
|
16
15
|
|
16
|
+
it 'compares objects for equality' do
|
17
|
+
expect_validate_user(times: 3)
|
18
|
+
api_limits1 = nexus_mods.api_limits
|
19
|
+
api_limits2 = nexus_mods.api_limits
|
20
|
+
expect(api_limits1.object_id).not_to eq api_limits2.object_id
|
21
|
+
expect(api_limits1).to eq api_limits2
|
22
|
+
end
|
23
|
+
|
17
24
|
end
|
18
25
|
|
19
26
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
describe NexusMods::Api::Game do
|
2
|
+
|
3
|
+
context 'when testing games' do
|
4
|
+
|
5
|
+
before do
|
6
|
+
expect_validate_user
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'returns the games list' do
|
10
|
+
expect_http_call_to(
|
11
|
+
path: '/v1/games.json',
|
12
|
+
json: [
|
13
|
+
json_game100,
|
14
|
+
json_game101
|
15
|
+
]
|
16
|
+
)
|
17
|
+
games = nexus_mods.games.sort_by(&:id)
|
18
|
+
expect(games.size).to eq 2
|
19
|
+
expect_game_to_be_game100(games.first)
|
20
|
+
expect_game_to_be_game101(games[1])
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns a game having missing parent category' do
|
24
|
+
expect_http_call_to(
|
25
|
+
path: '/v1/games.json',
|
26
|
+
json: [
|
27
|
+
{
|
28
|
+
'id' => 100,
|
29
|
+
'name' => 'Morrowind',
|
30
|
+
'forum_url' => 'https://forums.nexusmods.com/index.php?/forum/111-morrowind/',
|
31
|
+
'nexusmods_url' => 'http://www.nexusmods.com/morrowind',
|
32
|
+
'genre' => 'RPG',
|
33
|
+
'file_count' => 14_143,
|
34
|
+
'downloads' => 20_414_985,
|
35
|
+
'domain_name' => 'morrowind',
|
36
|
+
'approved_date' => 1,
|
37
|
+
'file_views' => 100_014_750,
|
38
|
+
'authors' => 2062,
|
39
|
+
'file_endorsements' => 719_262,
|
40
|
+
'mods' => 6080,
|
41
|
+
'categories' => [
|
42
|
+
{
|
43
|
+
'category_id' => 1,
|
44
|
+
'name' => 'Morrowind',
|
45
|
+
'parent_category' => false
|
46
|
+
},
|
47
|
+
{
|
48
|
+
'category_id' => 2,
|
49
|
+
'name' => 'Buildings',
|
50
|
+
'parent_category' => 3
|
51
|
+
}
|
52
|
+
]
|
53
|
+
}
|
54
|
+
]
|
55
|
+
)
|
56
|
+
game = nexus_mods.games.first
|
57
|
+
expect(game.id).to eq 100
|
58
|
+
expect(game.name).to eq 'Morrowind'
|
59
|
+
expect(game.forum_url).to eq 'https://forums.nexusmods.com/index.php?/forum/111-morrowind/'
|
60
|
+
expect(game.nexusmods_url).to eq 'http://www.nexusmods.com/morrowind'
|
61
|
+
expect(game.genre).to eq 'RPG'
|
62
|
+
expect(game.files_count).to eq 14_143
|
63
|
+
expect(game.downloads_count).to eq 20_414_985
|
64
|
+
expect(game.domain_name).to eq 'morrowind'
|
65
|
+
expect(game.approved_date).to eq Time.parse('1970-01-01 00:00:01 +0000')
|
66
|
+
expect(game.files_views).to eq 100_014_750
|
67
|
+
expect(game.authors_count).to eq 2062
|
68
|
+
expect(game.files_endorsements).to eq 719_262
|
69
|
+
expect(game.mods_count).to eq 6080
|
70
|
+
game_categories = game.categories
|
71
|
+
expect(game_categories.size).to eq 2
|
72
|
+
expect(game_categories.first.id).to eq 1
|
73
|
+
expect(game_categories.first.name).to eq 'Morrowind'
|
74
|
+
expect(game_categories.first.parent_category).to be_nil
|
75
|
+
expect(game_categories[1].id).to eq 2
|
76
|
+
expect(game_categories[1].name).to eq 'Buildings'
|
77
|
+
expect(game_categories[1].parent_category).to be_nil
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'compares objects for equality' do
|
81
|
+
expect_http_call_to(
|
82
|
+
path: '/v1/games.json',
|
83
|
+
json: [json_game100]
|
84
|
+
)
|
85
|
+
game1 = nexus_mods.games.first
|
86
|
+
game2 = nexus_mods.games.first
|
87
|
+
expect(game1.object_id).not_to eq game2.object_id
|
88
|
+
expect(game1).to eq game2
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|