def test_get_fankit_exists(tmpdir):
    tempdir_root = tmpdir.mkdir('test_get_fankit_exists')
    fake_tempdir = tempdir_root.mkdir('tempdir')
    fake_output_dir = tempdir_root.mkdir('output_dir')
    fake_output_dir.mkdir(fankit.FANKIT_DIR_NAME)

    fankit.get_fankit(fake_tempdir.realpath(), fake_output_dir.realpath(), True)

    assert fake_tempdir.join(fankit.FANKIT_DIR_NAME).check(dir=1)
def test_get_fankit_download_fail(tmpdir, requests_mock, capsys):
    requests_mock.get('mock://foo', status_code=500)

    tempdir_root = tmpdir.mkdir('test_get_fankit_download')
    fake_tempdir = tempdir_root.mkdir('tempdir')
    fake_output_dir = tempdir_root.mkdir('output_dir')

    fankit.get_fankit(fake_tempdir.realpath(), fake_output_dir.realpath(), True)

    assert fake_tempdir.join(fankit.FANKIT_DIR_NAME).check(dir=0)
def test_get_fankit_download_no_redirect(tmpdir, requests_mock, capsys):
    requests_mock.get(fankit.FANKIT_URL, status_code=200)

    tempdir_root = tmpdir.mkdir('test_get_fankit_download')
    fake_tempdir = tempdir_root.mkdir('tempdir')
    fake_output_dir = tempdir_root.mkdir('output_dir')

    fankit.get_fankit(fake_tempdir.realpath(), fake_output_dir.realpath(), True)

    #assert False
    assert fake_tempdir.join(fankit.FANKIT_DIR_NAME).check(dir=0)
def test_get_fankit_download_not_happen_when_flag_false(tmpdir):
    test_fankit_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'fankit.zip')

    with open(test_fankit_path, mode='rb') as file:
        test_fankit_content = file.read()

    tempdir_root = tmpdir.mkdir('test_get_fankit_download')
    fake_tempdir = tempdir_root.mkdir('tempdir')
    fake_output_dir = tempdir_root.mkdir('output_dir')

    fankit.get_fankit(fake_tempdir.realpath(), fake_output_dir.realpath(), False)

    assert fake_tempdir.join(fankit.FANKIT_DIR_NAME).check(dir=0)
def test_get_fankit_download(tmpdir, requests_mock):
    test_fankit_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'fankit.zip')

    with open(test_fankit_path, mode='rb') as file:
        test_fankit_content = file.read()

    redirect_headers = {
        'Location': fankit.FANKIT_URL
    }
    requests_mock.get(fankit.FANKIT_URL, headers=redirect_headers, content=test_fankit_content, status_code=200)

    tempdir_root = tmpdir.mkdir('test_get_fankit_download')
    fake_tempdir = tempdir_root.mkdir('tempdir')
    fake_output_dir = tempdir_root.mkdir('output_dir')

    fankit.get_fankit(fake_tempdir.realpath(), fake_output_dir.realpath(), True)

    assert fake_tempdir.join(fankit.FANKIT_DIR_NAME).check(dir=1)
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)