1
0
mirror of https://github.com/altlinux/admc.git synced 2025-03-16 14:50:13 +03:00

add upn_edit tests

This commit is contained in:
Dmitry Degtyarev 2021-03-26 18:07:00 +04:00
parent 22f036d83f
commit cf6e8cd28c
3 changed files with 231 additions and 0 deletions

View File

@ -96,6 +96,7 @@ set(TEST_SOURCES
set(TEST_TARGETS
admc_test_object_menu
admc_test_unlock_edit
admc_test_upn_edit
)
foreach(target ${TEST_TARGETS})

View File

@ -0,0 +1,177 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020 BaseALT Ltd.
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "admc_test_upn_edit.h"
#include "adldap.h"
#include "edits/upn_edit.h"
#include <QFormLayout>
#include <QLineEdit>
#include <QComboBox>
#define TEST_SUFFIX "test.com"
void ADMCTestUpnEdit::init() {
ADMCTest::init();
// Embed unlock edit in parent widget
QList<AttributeEdit *> edits;
upn_edit = new UpnEdit(&edits, parent_widget);
auto layout = new QFormLayout();
parent_widget->setLayout(layout);
upn_edit->add_to_layout(layout);
parent_widget->show();
QVERIFY(QTest::qWaitForWindowExposed(parent_widget, 1000));
prefix_edit = qobject_cast<QLineEdit *>(QApplication::focusWidget());
QVERIFY(prefix_edit != nullptr);
tab();
suffix_edit = qobject_cast<QComboBox *>(QApplication::focusWidget());
QVERIFY(suffix_edit != nullptr);
// Create test user
const QString name = TEST_USER;
dn = test_object_dn(name, CLASS_USER);
const bool create_success = ad.object_add(dn, CLASS_USER);
QVERIFY(create_success);
const QString test_upn = QString("%1@%2").arg(name, TEST_SUFFIX);
ad.attribute_replace_string(dn, ATTRIBUTE_USER_PRINCIPAL_NAME, test_upn);
const AdObject object = ad.search_object(dn);
upn_edit->load(ad, object);
}
// Edit should load prefix and suffix into widgets correctly
void ADMCTestUpnEdit::test_load() {
const QString prefix = prefix_edit->text();
QVERIFY(prefix == TEST_USER);
const QString suffix = suffix_edit->currentText();
QVERIFY(suffix == TEST_SUFFIX);
}
// edited() signal should be emitted when prefix or suffix
// widgets are edited
void ADMCTestUpnEdit::test_emit_edited() {
bool edited_signal_emitted = false;
connect(
upn_edit, &AttributeEdit::edited,
[&edited_signal_emitted]() {
edited_signal_emitted = true;
});
prefix_edit->setText("test");
QVERIFY(edited_signal_emitted);
edited_signal_emitted = false;
const int suffix_count = suffix_edit->count();
QVERIFY((suffix_count > 1));
const int changed_index =
[this]() {
if (suffix_edit->currentIndex() == 0) {
return 1;
} else {
return 0;
}
}();
suffix_edit->setCurrentIndex(changed_index);
QVERIFY(edited_signal_emitted);
}
// Edit should apply changes to suffix
void ADMCTestUpnEdit::test_apply_suffix() {
change_suffix_in_edit();
const bool apply_success = upn_edit->apply(ad, dn);
QVERIFY(apply_success);
QVERIFY2(edit_state_equals_to_server_state(), "Failed to change upn suffix");
}
// Edit should apply changes to prefix
void ADMCTestUpnEdit::test_apply_prefix() {
prefix_edit->setText("test-new-prefix");
const bool apply_success = upn_edit->apply(ad, dn);
QVERIFY(apply_success);
QVERIFY2(edit_state_equals_to_server_state(), "Failed to change upn prefix");
}
// Edit should apply changes to prefix
void ADMCTestUpnEdit::test_apply_prefix_and_suffix() {
change_suffix_in_edit();
prefix_edit->setText("test-new-prefix2");
const bool apply_success = upn_edit->apply(ad, dn);
QVERIFY(apply_success);
QVERIFY2(edit_state_equals_to_server_state(), "Failed to change upn prefix and suffix");
}
// Edit should reset to server state after load() call
void ADMCTestUpnEdit::test_reset() {
change_suffix_in_edit();
prefix_edit->setText("test-new-prefix3");
const AdObject object = ad.search_object(dn);
upn_edit->load(ad, object);
QVERIFY2(edit_state_equals_to_server_state(), "Failed to reset");
}
bool ADMCTestUpnEdit::edit_state_equals_to_server_state() {
const AdObject object = ad.search_object(dn);
const QString server_upn = object.get_string(ATTRIBUTE_USER_PRINCIPAL_NAME);
const QString edit_upn =
[this]() {
const QString prefix = prefix_edit->text();
const QString suffix = suffix_edit->currentText();
return QString("%1@%2").arg(prefix, suffix);
}();
return (edit_upn == server_upn);
}
// Change to next suffix, not equal to current one
void ADMCTestUpnEdit::change_suffix_in_edit() {
const int new_suffix_index =
[this]() {
const QString current_suffix = suffix_edit->currentText();
for (int i = 0; i < suffix_edit->count(); i++) {
const QString suffix = suffix_edit->itemText(i);
if (suffix != current_suffix) {
return i;
}
}
return -1;
}();
QVERIFY2((new_suffix_index != -1), "Failed to find different suffix");
suffix_edit->setCurrentIndex(new_suffix_index);
}
QTEST_MAIN(ADMCTestUpnEdit)

View File

@ -0,0 +1,53 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020 BaseALT Ltd.
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ADMC_TEST_UPN_EDIT_H
#define ADMC_TEST_UPN_EDIT_H
#include "admc_test.h"
class UpnEdit;
class QLineEdit;
class QComboBox;
class ADMCTestUpnEdit : public ADMCTest {
Q_OBJECT
private slots:
void init() override;
void test_load();
void test_emit_edited();
void test_apply_suffix();
void test_apply_prefix();
void test_apply_prefix_and_suffix();
void test_reset();
private:
UpnEdit *upn_edit;
QLineEdit *prefix_edit;
QComboBox *suffix_edit;
QString dn;
QString get_upn();
bool edit_state_equals_to_server_state();
void change_suffix_in_edit();
};
#endif /* ADMC_TEST_UPN_EDIT_H */