def test_process_absent_members(tmpdir): config_file = tmpdir.mkdir('test_get_suggestions').join('testfile') config_file.write(__config_file_score__ + '\nthreshold_demote=-999999\nthreshold_promote=9999999') config = load_config_file(config_file.realpath()) h = history.get_member_history(__fake_club__.members, config['bstools']['timestamp'], __fake_history_old_member__) absent_members = bstools.process_absent_members(config, h['members']) assert len(absent_members) == 1 assert absent_members[0].tag == '#ZZZZZZ'
def test_get_suggestions_kick(tmpdir): config_file = tmpdir.mkdir('test_get_suggestions').join('testfile') config_file.write(__config_file_score__ + '\nmin_club_size=1') config = load_config_file(config_file.realpath()) h = history.get_member_history(__fake_club__.members, config['bstools']['timestamp']) members = bstools.process_members(config, __fake_club__, __fake_warlog__, __fake_currentwar_notinwar__, h) suggestions = bstools.get_suggestions(config, members, __fake_club__.required_trophies) print(suggestions) assert suggestions[0].startswith('Kick') assert members[3].name in suggestions[0]
def test_get_suggestions_recruit(tmpdir): config_file = tmpdir.mkdir('test_get_suggestions').join('testfile') config_file.write(__config_file_score__ + '\nthreshold_demote=-999999\nthreshold_promote=9999999') config = load_config_file(config_file.realpath()) h = history.get_member_history(__fake_club__.members, config['bstools']['timestamp']) members = bstools.process_members(config, __fake_club__, __fake_warlog__, __fake_currentwar_notinwar__, h) suggestions = bstools.get_suggestions(config, members, __fake_club__) print(suggestions) assert len(suggestions) == 1 assert suggestions[0] == config['strings']['suggestionRecruit']
def test_get_suggestions_promote_demote(tmpdir): config_file = tmpdir.mkdir('test_get_suggestions').join('testfile') config_file.write(__config_file_score__ + '\nthreshold_promote=10') config = load_config_file(config_file.realpath()) h = history.get_member_history(__fake_club__.members, config['bstools']['timestamp']) members = bstools.process_members(config, __fake_club__, __fake_warlog__, __fake_currentwar_notinwar__, h) suggestions = bstools.get_suggestions(config, members, __fake_club__.required_trophies) print(suggestions) assert suggestions[0].startswith('Demote') assert members[2].name in suggestions[0] assert suggestions[1].startswith('Promote') or suggestions[2].startswith( 'Promote') assert members[4].name in suggestions[1] or members[4].name in suggestions[ 2]
def test_get_suggestions_nosuggestions(tmpdir): config_file = tmpdir.mkdir('test_get_suggestions').join('testfile') config_file.write( __config_file_score__ + '\nthreshold_demote=-999999\nthreshold_promote=9999999\nmin_club_size={}' .format(bstools.MAX_CLAN_SIZE)) config = load_config_file(config_file.realpath()) war = ProcessedCurrentWar(config=config, current_war=pybrawl.WarCurrent(state='notInWar')) factory = MemberFactory(config=config, member_history=history.get_member_history( __fake_club__.members, config['bstools']['timestamp'], '{}', war), current_war=war, Club=__fake_club__, warlog=pybrawl.WarLog(items=[])) members = [] for i in range(0, bstools.MAX_CLAN_SIZE): member = factory.get_processed_member( pybrawl.ClubMember(tag="#AAAAAA", name="PresidentPerson", role="president", explevel=13, trophies=9999, name_color="", last_seen="20190802T154619.000Z")) member.safe = True members.append(member) suggestions = bstools.get_suggestions(config, members, __fake_club__.required_trophies) assert len(suggestions) == 1 assert suggestions[-1] == config['strings']['suggestionNone']
war_incomplete.collection_battle_wins = 2 war_incomplete.collection_battle_losses = 0 assert calc.get_war_score(war_incomplete) == -26 war_na = WarParticipation(config=config, member=ProcessedMember(__fake_member_list__[4]), war=__fake_war__) assert calc.get_war_score(war_na) == -1 war_new = WarParticipation(config=config, member=ProcessedMember(__fake_member_list__[4]), war=__fake_war__) war_new.status = 'not-in-Club' assert calc.get_war_score(war_new) == 0 def test_donations_score(tmpdir): config_file = tmpdir.mkdir('test_donations_score').join('testfile') config_file.write(__config_file_score__) config = load_config_file(config_file.realpath()) calc = ScoreCalculator(config) war = ProcessedCurrentWar(config=config, current_war=pybrawl.WarCurrent(state='notInWar')) member_history = history.get_member_history(__fake_member_list__, config['bstools']['timestamp'], '{}', war) date = datetime(2019, 2, 12, 7, 32, 1, 0) member_6 = MemberFactory(config=config, current_war=war, Club=__fake_club__, member_history=member_history, warlog=pybrawl.WarLog(items=[]), days_from_donation_reset=6).get_processed_member(__fake_member_list__[0]) member_3 = MemberFactory(config=config, current_war=war, Club=__fake_club__, member_history=member_history, warlog=pybrawl.WarLog(items=[]), days_from_donation_reset=3).get_processed_member(__fake_member_list__[0]) member_0 = MemberFactory(config=config, current_war=war, Club=__fake_club__, member_history=member_history, warlog=pybrawl.WarLog(items=[]), days_from_donation_reset=0).get_processed_member(__fake_member_list__[0]) assert calc.get_member_donations_score(member_6) == 11 assert calc.get_member_donations_score(member_3) == 18 assert calc.get_member_donations_score(member_0) == 31
def build_dashboard(config): # pragma: no coverage """Compile and render Club dashboard, get club via player.""" print('- info: requesting info for Club id: {}'.format( config['api']['club_id'])) api = ApiWrapper(config) club = api.get_club_from_api() # Create temporary directory. All file writes, until the very end, # will happen in this directory, so that no matter what we do, it # won't hose existing stuff. tempdir = tempfile.mkdtemp(config['paths']['temp_dir_name']) # Putting everything in a `try`...`finally` to ensure `tempdir` is removed # when we're done. We don't want to pollute the user's disk. try: output_path = os.path.expanduser(config['paths']['out']) # process data from API club_processed = ProcessedClub(club, config) players_processed = process_players(config, club) member_history = history.get_member_history( club.members, config['bstools']['timestamp'], io.get_previous_history(output_path)) members_processed = process_members(config, club, member_history) former_members = process_absent_members(config, member_history['members']) io.parse_templates( config, member_history, tempdir, club_processed, members_processed, players_processed, former_members, get_suggestions(config, members_processed, club_processed.required_trophies), get_scoring_rules(config)) if (config['bstools']['debug'] == True): # archive outputs of API for debugging io.dump_debug_logs( tempdir, { 'club': club.to_dict(), 'club-processed': club_processed, 'players-processed': players_processed, 'members-processed': members_processed, 'former-members': former_members, }) # if fankit is previously downloaded, it will copy fankit. Otherwise, # if fankit is enabled, it will download it. fankit.get_fankit(tempdir, output_path, config['paths']['use_fankit']) io.copy_static_assets(tempdir, config['paths']['club_logo'], config['paths']['favicon']) io.move_temp_to_output_dir(tempdir, output_path) # TODO discord.trigger_webhooks(config, members_processed) #specialization_object = Specialization.objects.get(name="My Test Specialization") # except Exception as e: # logger.error('Error bstools: {}'.format(e)) except Exception as e: print(traceback.format_exc()) finally: # Ensure that temporary directory gets deleted no matter what shutil.rmtree(tempdir)