Exemplo n.º 1
0
def upload_letter_logos(old_filename, new_filename, png_file, user_id):
    persist_logo(old_filename, permanent_letter_logo_name(new_filename, 'svg'))

    upload_letter_png_logo(
        permanent_letter_logo_name(new_filename, 'png'),
        png_file,
        current_app.config['AWS_REGION'],
    )

    delete_letter_temp_files_created_by(user_id)
def test_update_letter_branding_shows_form_errors_on_name_fields(
        mocker, logged_in_platform_admin_client,
        mock_get_letter_branding_by_id, fake_uuid):
    mocker.patch(
        'app.main.views.letter_branding.letter_branding_client.update_letter_branding'
    )

    logo = permanent_letter_logo_name('hm-government', 'svg')

    response = logged_in_platform_admin_client.post(url_for(
        '.update_letter_branding', branding_id=fake_uuid, logo=logo),
                                                    data={
                                                        'name':
                                                        '',
                                                        'operation':
                                                        'branding-details'
                                                    },
                                                    follow_redirects=True)

    page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
    error_messages = page.find_all('span', class_='error-message')

    assert page.find('h1').text == 'Update letter branding'
    assert len(error_messages) == 1
    assert error_messages[0].text.strip() == 'This field is required.'
def test_update_letter_branding_shows_form_errors_on_name_fields(
        mocker, platform_admin_client, mock_get_letter_branding_by_id,
        fake_uuid):
    mocker.patch(
        "app.main.views.letter_branding.letter_branding_client.update_letter_branding"
    )

    logo = permanent_letter_logo_name("hm-government", "svg")

    response = platform_admin_client.post(
        url_for(".update_letter_branding", branding_id=fake_uuid, logo=logo),
        data={
            "name": "",
            "operation": "branding-details"
        },
        follow_redirects=True,
    )

    page = BeautifulSoup(response.data.decode("utf-8"), "html.parser")
    error_messages = page.find_all("span", class_="error-message")

    assert page.find("h1").text == "Update letter branding"
    assert len(error_messages) == 1
    assert error_messages[0].text.strip() == "This field is required."
def update_letter_branding(branding_id, logo=None):
    letter_branding = letter_branding_client.get_letter_branding(branding_id)

    file_upload_form = SVGFileUpload()
    letter_branding_details_form = ServiceLetterBrandingDetails(
        name=letter_branding['name'], )

    file_upload_form_submitted = file_upload_form.file.data
    details_form_submitted = request.form.get(
        'operation') == 'branding-details'

    logo = logo if logo else permanent_letter_logo_name(
        letter_branding['filename'], 'svg')

    if file_upload_form_submitted and file_upload_form.validate_on_submit():
        upload_filename = upload_letter_temp_logo(
            file_upload_form.file.data.filename,
            file_upload_form.file.data,
            current_app.config['AWS_REGION'],
            user_id=session["user_id"])

        if logo.startswith(LETTER_TEMP_TAG.format(user_id=session['user_id'])):
            delete_letter_temp_file(logo)

        return redirect(
            url_for('.update_letter_branding',
                    branding_id=branding_id,
                    logo=upload_filename))

    if details_form_submitted and letter_branding_details_form.validate_on_submit(
    ):
        db_filename = letter_filename_for_db(logo, session['user_id'])

        try:
            if db_filename == letter_branding['filename']:

                letter_branding_client.update_letter_branding(
                    branding_id=branding_id,
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                return redirect(url_for('main.letter_branding'))
            else:
                letter_branding_client.update_letter_branding(
                    branding_id=branding_id,
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                upload_letter_svg_logo(logo, db_filename, session['user_id'])

                return redirect(url_for('main.letter_branding'))

        except HTTPError as e:
            if 'name' in e.message:
                letter_branding_details_form.name.errors.append(
                    e.message['name'][0])
            else:
                raise e
        except BotoClientError:
            # we had a problem saving the file - rollback the db changes
            letter_branding_client.update_letter_branding(
                branding_id=branding_id,
                filename=letter_branding['filename'],
                name=letter_branding['name'],
            )
            file_upload_form.file.errors = [
                'Error saving uploaded file - try uploading again'
            ]

    return render_template(
        'views/letter-branding/manage-letter-branding.html',
        file_upload_form=file_upload_form,
        letter_branding_details_form=letter_branding_details_form,
        cdn_url=get_logo_cdn_domain(),
        logo=logo,
        is_update=True)
def upload_letter_svg_logo(old_filename, new_filename, user_id):
    persist_logo(old_filename, permanent_letter_logo_name(new_filename, 'svg'))

    delete_letter_temp_files_created_by(user_id)
Exemplo n.º 6
0
def update_letter_branding(branding_id, logo=None):
    letter_branding = letter_branding_client.get_letter_branding(branding_id)

    file_upload_form = SVGFileUpload()
    letter_branding_details_form = ServiceLetterBrandingDetails(
        name=letter_branding["name"], )

    file_upload_form_submitted = file_upload_form.file.data
    details_form_submitted = request.form.get(
        "operation") == "branding-details"

    logo = logo if logo else permanent_letter_logo_name(
        letter_branding["filename"], "svg")

    if file_upload_form_submitted and file_upload_form.validate_on_submit():
        upload_filename = upload_letter_temp_logo(
            file_upload_form.file.data.filename,
            file_upload_form.file.data,
            current_app.config["AWS_REGION"],
            user_id=session["user_id"],
        )

        if logo.startswith(LETTER_TEMP_TAG.format(user_id=session["user_id"])):
            delete_letter_temp_file(logo)

        return redirect(
            url_for(".update_letter_branding",
                    branding_id=branding_id,
                    logo=upload_filename))

    if details_form_submitted and letter_branding_details_form.validate_on_submit(
    ):
        db_filename = letter_filename_for_db(logo, session["user_id"])

        try:
            if db_filename == letter_branding["filename"]:

                letter_branding_client.update_letter_branding(
                    branding_id=branding_id,
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                return redirect(url_for("main.letter_branding"))
            else:
                png_file = get_png_file_from_svg(logo)

                letter_branding_client.update_letter_branding(
                    branding_id=branding_id,
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                upload_letter_logos(logo, db_filename, png_file,
                                    session["user_id"])

                return redirect(url_for("main.letter_branding"))

        except HTTPError as e:
            if "name" in e.message:
                letter_branding_details_form.name.errors.append(
                    e.message["name"][0])
            else:
                raise e
        except BotoClientError:
            # we had a problem saving the file - rollback the db changes
            letter_branding_client.update_letter_branding(
                branding_id=branding_id,
                filename=letter_branding["filename"],
                name=letter_branding["name"],
            )
            file_upload_form.file.errors = [
                "Error saving uploaded file - try uploading again"
            ]

    return render_template(
        "views/letter-branding/manage-letter-branding.html",
        file_upload_form=file_upload_form,
        letter_branding_details_form=letter_branding_details_form,
        cdn_url=get_logo_cdn_domain(),
        logo=logo,
        is_update=True,
    )