Browse Source

feat(bench): add new bench command for add user (backport #17938) (#17942)

* feat(bench): add new bench command for add user

(cherry picked from commit 40f54d04b7)

* test: simplify user addition test

(cherry picked from commit 6ec5c05e4e)

Co-authored-by: Alaa Alsalehi <alaadiaa@gmail.com>
Co-authored-by: Ankush Menat <ankush@frappe.io>
version-14
mergify[bot] 2 years ago
committed by GitHub
parent
commit
cf508f045c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 68 additions and 0 deletions
  1. +56
    -0
      frappe/commands/site.py
  2. +12
    -0
      frappe/tests/test_commands.py

+ 56
- 0
frappe/commands/site.py View File

@@ -496,6 +496,32 @@ def add_system_manager(context, email, first_name, last_name, send_welcome_email
raise SiteNotSpecifiedError


@click.command("add-user")
@click.argument("email")
@click.option("--first-name")
@click.option("--last-name")
@click.option("--password")
@click.option("--user-type")
@click.option("--add-role", multiple=True)
@click.option("--send-welcome-email", default=False, is_flag=True)
@pass_context
def add_user_for_sites(
context, email, first_name, last_name, user_type, send_welcome_email, password, add_role
):
"Add user to a site"
import frappe.utils.user

for site in context.sites:
frappe.connect(site=site)
try:
add_new_user(email, first_name, last_name, user_type, send_welcome_email, password, add_role)
frappe.db.commit()
finally:
frappe.destroy()
if not context.sites:
raise SiteNotSpecifiedError


@click.command("disable-user")
@click.argument("email")
@pass_context
@@ -1275,8 +1301,38 @@ def handle_data(data: dict, format="json"):
render_table(data)


def add_new_user(
email,
first_name=None,
last_name=None,
user_type="System User",
send_welcome_email=False,
password=None,
role=None,
):
user = frappe.new_doc("User")
user.update(
{
"name": email,
"email": email,
"enabled": 1,
"first_name": first_name or email,
"last_name": last_name,
"user_type": user_type,
"send_welcome_email": 1 if send_welcome_email else 0,
}
)
user.insert()
user.add_roles(*role)
if password:
from frappe.utils.password import update_password

update_password(user=user.name, pwd=password)


commands = [
add_system_manager,
add_user_for_sites,
backup,
drop_site,
install_app,


+ 12
- 0
frappe/tests/test_commands.py View File

@@ -691,6 +691,18 @@ class TestSiteMigration(BaseTestCommands):
self.assertEqual(result.exception, None)


class TestAddNewUser(BaseTestCommands):
def test_create_user(self):
self.execute(
"bench --site {site} add-user test@gmail.com --first-name test --last-name test --password 123 --user-type 'System User' --add-role 'Accounts User' --add-role 'Sales User'"
)
frappe.db.rollback()
self.assertEqual(self.returncode, 0)
user = frappe.get_doc("User", "test@gmail.com")
roles = {r.role for r in user.roles}
self.assertEqual({"Accounts User", "Sales User"}, roles)


class TestBenchBuild(BaseTestCommands):
def test_build_assets_size_check(self):
with cli(frappe.commands.utils.build, "--force --production") as result:


Loading…
Cancel
Save