# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
#
# RcGcDw is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RcGcDw is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with RcGcDw. If not, see .
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
#
# RcGcDw is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RcGcDw is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with RcGcDw. If not, see .
import json
import sys
from unittest import TestCase
from src.exceptions import MediaWikiError
from src.misc import datafile, data_template, weighted_average, prepare_paths, parse_mw_request_info
from os.path import exists
class TestDataFile(TestCase):
def test_generate_datafile(self):
datafile.generate_datafile()
self.assertTrue(exists(datafile.data_filename))
with open(datafile.data_filename, "r") as df:
contents = df.read()
print(json.loads(contents))
self.assertEqual(json.loads(contents), data_template)
def test_load_datafile(self):
self.assertEqual(datafile.load_datafile(), data_template)
def test_save_datafile(self):
datafile["discussion_id"] = 321388838283
datafile.save_datafile()
with open(datafile.data_filename, "r") as df:
contents = json.loads(df.read())
self.assertEqual(contents["discussion_id"], 321388838283)
class Test(TestCase):
def test_weighted_average(self):
self.assertEqual(weighted_average(3, 5, 30), 7.5)
def test_prepare_paths(self):
self.assertEqual(prepare_paths("https://minecraft.fandom.com/blabhlldlasldllad", dry=True), "https://minecraft.fandom.com")
self.assertEqual(prepare_paths("https://minecraft.fandom.com/wiki/Minecraft_Wiki", dry=True), "https://minecraft.fandom.com")
self.assertEqual(prepare_paths("https://minecraft.fandom.com/", dry=True), "https://minecraft.fandom.com")
def test_parse_mw_request_info(self):
warning_data = """{"batchcomplete":"","warnings":[{"code":"unrecognizedvalues","key":"apiwarn-unrecognizedvalues","params":["list",{"list":["recentchange"],"type":"comma"},1],"module":"query"},{"code":"unrecognizedparams","key":"apierror-unrecognizedparams","params":[{"list":{"3":"rcshow","4":"rcprop","5":"rclimit","6":"rctype"},"type":"comma"},4],"module":"main"}]}"""
warning_data = json.loads(warning_data)
error_data = """{"errors":[{"code":"missingparam","key":"apierror-missingparam-at-least-one-of","params":[{"list":["totitle","toid","torev","totext","torelative","toslots"],"type":"text"},6],"module":"compare"}],"*":"See https://minecraft.fandom.com/pl/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes."}"""
error_data = json.loads(error_data)
self.assertRaises(MediaWikiError, parse_mw_request_info, error_data, "dummy")
with self.assertLogs("rcgcdw.misc", level="WARNING"):
parse_mw_request_info(warning_data, "dummy")
# with self.assertNoLogs("rcgcdw.misc", level="WARNING"): # python 3.10
# parse_mw_request_info(legit_data, "dummy")