Asa@66
|
1 --@debug@
|
Asa@66
|
2 local ItemAuditor = select(2, ...)
|
Asa@66
|
3 local Utils= ItemAuditor:GetModule("Utils")
|
Asa@66
|
4
|
Asa@66
|
5 local function assertTable(tblA, tblB, msg)
|
Asa@66
|
6 for key, value in pairs(tblA) do
|
Asa@66
|
7 assert(tblA[key] == tblB[key], msg)
|
Asa@66
|
8 end
|
Asa@66
|
9 for key, value in pairs(tblB) do
|
Asa@66
|
10 assert(tblA[key] == tblB[key], msg)
|
Asa@66
|
11 end
|
Asa@66
|
12 end
|
Asa@66
|
13
|
Asa@66
|
14 local UnitTests = {};
|
Asa@66
|
15 local backups = {}
|
Asa@66
|
16
|
Asa@66
|
17 local FROSTWEAVE = "\124cffffffff\124Hitem:33470:0:0:0:0:0:0:0:0\124h[Frostweave Cloth]\124h\124r"
|
Asa@66
|
18 local RUNECLOTH = "\124cffffffff\124Hitem:14047:0:0:0:0:0:0:0:0\124h[Runecloth]\124h\124r"
|
Asa@66
|
19 local BOLT_FW = "\124cffffd000\124Henchant:55899\124h[Tailoring: Bolt of Frostweave]\124h\124r"
|
Asa@66
|
20
|
Asa@66
|
21 local fakeBags = {
|
Asa@66
|
22 [0] = {
|
Asa@66
|
23 size = 16,
|
Asa@66
|
24 contents = {
|
Asa@66
|
25 [0] = nil,
|
Asa@66
|
26 [1] = {link = FROSTWEAVE, count=10},
|
Asa@66
|
27 }
|
Asa@66
|
28 },
|
Asa@66
|
29 [1] = {
|
Asa@66
|
30 size = 8,
|
Asa@66
|
31 contents = {
|
Asa@66
|
32 [0] = {link = RUNECLOTH, count=20},
|
Asa@66
|
33 }
|
Asa@66
|
34 },
|
Asa@66
|
35 }
|
Asa@66
|
36
|
Asa@66
|
37 local fakeMoney = 314159265
|
Asa@66
|
38
|
Asa@66
|
39 local fakeAlts = {
|
Asa@66
|
40 [33470] = 10, -- Frostweave
|
Asa@66
|
41 }
|
Asa@66
|
42
|
Asa@66
|
43
|
Asa@66
|
44 UnitTests.Utils = {
|
Asa@66
|
45 mocks = {
|
Asa@66
|
46 };
|
Asa@66
|
47 setUp = function()
|
Asa@66
|
48 return {};
|
Asa@66
|
49 end;
|
Asa@66
|
50 tearDown = function()
|
Asa@66
|
51 end;
|
Asa@66
|
52
|
Asa@66
|
53 testGetItemID = function()
|
Asa@66
|
54 local id = Utils.GetItemID(FROSTWEAVE)
|
Asa@66
|
55 assert(id == 33470)
|
Asa@66
|
56
|
Asa@66
|
57 -- This test doesn't work yet.
|
Asa@66
|
58 -- local id = Utils:GetItemID('invalid link')
|
Asa@66
|
59 -- assert(id == nil)
|
Asa@66
|
60 end;
|
Asa@66
|
61
|
Asa@66
|
62 testGetIDFromLink = function()
|
Asa@66
|
63 -- This should be moved to Utils
|
Asa@66
|
64 local id = ItemAuditor:GetIDFromLink(FROSTWEAVE)
|
Asa@66
|
65 assert(id == 33470)
|
Asa@66
|
66 end;
|
Asa@66
|
67
|
Asa@66
|
68 testGetSafeLink = function()
|
Asa@66
|
69 -- This should be moved to Utils
|
Asa@66
|
70 local link = ItemAuditor:GetSafeLink(FROSTWEAVE)
|
Asa@66
|
71 assert(link == 'item:33470')
|
Asa@66
|
72 end;
|
Asa@66
|
73 }
|
Asa@66
|
74
|
Asa@66
|
75 UnitTests.Core = {
|
Asa@66
|
76 mocks = {
|
Asa@66
|
77 NUM_BAG_SLOTS = 1;
|
Asa@66
|
78 GetContainerNumSlots = function(bagID)
|
Asa@66
|
79 return (fakeBags[bagID] and fakeBags[bagID].size) or 0
|
Asa@66
|
80 end;
|
Asa@66
|
81 GetContainerItemLink = function(bagID, slotID)
|
Asa@66
|
82 return fakeBags[bagID] and fakeBags[bagID].contents[slotID] and fakeBags[bagID].contents[slotID].link
|
Asa@66
|
83 end;
|
Asa@66
|
84 GetMoney = function()
|
Asa@66
|
85 return fakeMoney
|
Asa@66
|
86 end;
|
Asa@66
|
87 GetItemCount = function(link)
|
Asa@66
|
88 local total = 0
|
Asa@66
|
89 local id = tonumber(link) or ItemAuditor:GetIDFromLink(link)
|
Asa@66
|
90
|
Asa@66
|
91 for bagID, bag in pairs(fakeBags) do
|
Asa@66
|
92 for slotID, contents in pairs(bag.contents) do
|
Asa@66
|
93 if contents and ItemAuditor:GetIDFromLink(contents.link) == id then
|
Asa@66
|
94 total = total + contents.count
|
Asa@66
|
95 end
|
Asa@66
|
96 end
|
Asa@66
|
97 end
|
Asa@66
|
98 return total
|
Asa@66
|
99 end;
|
Asa@66
|
100 };
|
Asa@66
|
101 setUp = function()
|
Asa@66
|
102 ItemAuditor:Print('Unit Test setUp')
|
Asa@66
|
103 backups['ItemAuditor.db'] = ItemAuditor.db
|
Asa@66
|
104 ItemAuditor.db = {
|
Asa@66
|
105 char = {
|
Asa@66
|
106 ah = 1,
|
Asa@66
|
107 use_quick_auctions = false,
|
Asa@66
|
108 crafting_threshold = 1,
|
Asa@66
|
109 auction_threshold = 0.15,
|
Asa@66
|
110 output_chat_frame = nil,
|
Asa@66
|
111 },
|
Asa@66
|
112 profile = {
|
Asa@66
|
113 messages = {
|
Asa@66
|
114 cost_updates = true,
|
Asa@66
|
115 queue_skip = false,
|
Asa@66
|
116 },
|
Asa@66
|
117 ItemAuditor_enabled = true,
|
Asa@66
|
118 -- This is for development, so I have no plans to turn it into an option.
|
Asa@66
|
119 show_debug_frame_on_startup = false,
|
Asa@66
|
120 },
|
Asa@66
|
121 factionrealm = {
|
Asa@66
|
122 items = {},
|
Asa@66
|
123 item_account = {},
|
Asa@66
|
124 },
|
Asa@66
|
125 }
|
Asa@66
|
126
|
Asa@82
|
127 backups['ItemAuditor.GetItemCount'] = ItemAuditor.GetItemCount
|
Asa@82
|
128 ItemAuditor.GetItemCount = function(self, id)
|
Asa@66
|
129 local total = GetItemCount(id)
|
Asa@66
|
130 total = total + (fakeAlts[id] or 0)
|
Asa@66
|
131
|
Asa@66
|
132 return total
|
Asa@66
|
133 end
|
Asa@66
|
134
|
Asa@66
|
135 ItemAuditor:UpdateCurrentInventory()
|
Asa@66
|
136
|
Asa@66
|
137 return {};
|
Asa@66
|
138 end;
|
Asa@66
|
139 tearDown = function()
|
Asa@66
|
140 ItemAuditor:Print('Unit Test tearDown')
|
Asa@66
|
141 ItemAuditor:UpdateCurrentInventory()
|
Asa@66
|
142 ItemAuditor.db = backups['ItemAuditor.db']
|
Asa@82
|
143 ItemAuditor.GetItemCount = backups['ItemAuditor.GetItemCount']
|
Asa@66
|
144 end;
|
Asa@66
|
145
|
Asa@66
|
146 testMockGetContainerItemLink = function()
|
Asa@66
|
147 assert(GetContainerItemLink(0, 1) == FROSTWEAVE)
|
Asa@66
|
148 end;
|
Asa@66
|
149
|
Asa@66
|
150 testGetItemCost = function(ia)
|
Asa@66
|
151 local total, individual, count = ItemAuditor:GetItemCost(FROSTWEAVE)
|
Asa@66
|
152 assert(total == 0, "total: "..total)
|
Asa@66
|
153 assert(individual == 0, "individual: "..individual)
|
Asa@66
|
154 assert(count == 20, "count: "..count)
|
Asa@66
|
155
|
Asa@66
|
156 local total, individual, count = ItemAuditor:GetItemCost(BOLT_FW)
|
Asa@66
|
157 assert(total == 0, "total: "..total)
|
Asa@66
|
158 assert(individual == 0, "individual: "..individual)
|
Asa@66
|
159 assert(count == 0, "count: "..count)
|
Asa@66
|
160 end;
|
Asa@66
|
161
|
Asa@66
|
162 testGetCurrentInventory = function()
|
Asa@66
|
163 local inventory = ItemAuditor:GetCurrentInventory()
|
Asa@66
|
164 assert(inventory.items['item:33470'] == 10)
|
Asa@66
|
165 assert(inventory.items['item:14047'] == 20)
|
Asa@66
|
166 assert(inventory.money == fakeMoney)
|
Asa@66
|
167 end;
|
Asa@66
|
168
|
Asa@66
|
169 testUpdateAuditPurchase = function()
|
Asa@66
|
170 ItemAuditor:UpdateCurrentInventory()
|
Asa@66
|
171 local backupSaveValue = ItemAuditor.SaveValue
|
Asa@66
|
172
|
Asa@66
|
173 local price = 200000
|
Asa@66
|
174
|
Asa@66
|
175 ItemAuditor.SaveValue = function(self, link, value, countChange)
|
Asa@66
|
176 assertEquals({'item:33470', price, 20}, {link, value, countChange})
|
Asa@66
|
177 return backupSaveValue(self, link, value, countChange)
|
Asa@66
|
178 end
|
Asa@66
|
179
|
Asa@66
|
180 ItemAuditor:UpdateAudit()
|
Asa@66
|
181
|
Asa@66
|
182 assertEquals({0, 0, 20}, {ItemAuditor:GetItemCost(FROSTWEAVE)})
|
Asa@66
|
183
|
Asa@66
|
184 -- buy 20 for 20g. Because I already had 20 frostweave, this will
|
Asa@66
|
185 -- be counted like I spent 40g on 40 frostweave
|
Asa@66
|
186 fakeBags[1].contents[5] = {link = FROSTWEAVE, count=20}
|
Asa@66
|
187 fakeMoney = fakeMoney - price
|
Asa@66
|
188 ItemAuditor:UpdateAudit()
|
Asa@66
|
189
|
Asa@66
|
190 assertEquals({400000, 10000, 40}, {ItemAuditor:GetItemCost(FROSTWEAVE)})
|
Asa@66
|
191
|
Asa@66
|
192 ItemAuditor.SaveValue = function(self, link, value, countChange)
|
Asa@66
|
193 assertEquals({'item:33470', 0-price, -10}, {link, value, countChange})
|
Asa@66
|
194 return backupSaveValue(self, link, value, countChange)
|
Asa@66
|
195 end
|
Asa@66
|
196
|
Asa@66
|
197 -- Sell 10 frostweave for 20g.
|
Asa@66
|
198 fakeBags[1].contents[5] = {link = FROSTWEAVE, count=10}
|
Asa@66
|
199 fakeMoney = fakeMoney + price
|
Asa@66
|
200 ItemAuditor:UpdateAudit()
|
Asa@66
|
201
|
Asa@66
|
202 assertEquals({200000, 6667, 30}, {ItemAuditor:GetItemCost(FROSTWEAVE)})
|
Asa@66
|
203
|
Asa@66
|
204 ItemAuditor.SaveValue = backupSaveValue
|
Asa@66
|
205 end
|
Asa@66
|
206 }
|
Asa@66
|
207
|
Asa@66
|
208 if WoWUnit then
|
Asa@66
|
209 WoWUnit:AddTestSuite("ItemAuditor", UnitTests);
|
Asa@66
|
210
|
Asa@69
|
211 -- WoWUnitConsole:SlashCommand('ItemAuditor')
|
Asa@66
|
212 end
|
Asa@66
|
213 --@end-debug@ |