Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
course-discovery
Commits
a36feacf
Commit
a36feacf
authored
Aug 03, 2016
by
Matt Drayer
Committed by
GitHub
Aug 03, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #204 from edx/mattdrayer/partner-management-command
mattdrayer/partner-management-command: Add new command
parents
6dbb7a10
d8e313b4
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
270 additions
and
0 deletions
+270
-0
course_discovery/apps/core/management/commands/create_or_update_partner.py
+116
-0
course_discovery/apps/core/management/commands/tests/__init__.py
+0
-0
course_discovery/apps/core/management/commands/tests/test_create_or_update_partner.py
+154
-0
No files found.
course_discovery/apps/core/management/commands/create_or_update_partner.py
0 → 100644
View file @
a36feacf
""" Creates or updates a Partner, including API and OIDC information """
import
logging
from
django.core.management
import
BaseCommand
from
course_discovery.apps.core.models
import
Partner
logger
=
logging
.
getLogger
(
__name__
)
class
Command
(
BaseCommand
):
help
=
'Create a new Partner, or update an existing Partner.'
def
add_arguments
(
self
,
parser
):
parser
.
add_argument
(
'--code'
,
action
=
'store'
,
dest
=
'partner_code'
,
type
=
str
,
required
=
True
,
help
=
'Short code for the specified Partner.'
)
parser
.
add_argument
(
'--name'
,
action
=
'store'
,
dest
=
'partner_name'
,
type
=
str
,
required
=
True
,
help
=
'Name for the specified Partner.'
)
parser
.
add_argument
(
'--courses-api-url'
,
action
=
'store'
,
dest
=
'courses_api_url'
,
type
=
str
,
default
=
''
,
help
=
'API endpoint for accessing Partner course data.'
)
parser
.
add_argument
(
'--ecommerce-api-url'
,
action
=
'store'
,
dest
=
'ecommerce_api_url'
,
type
=
str
,
default
=
''
,
help
=
'API endpoint for accessing Partner ecommerce data.'
)
parser
.
add_argument
(
'--organizations-api-url'
,
action
=
'store'
,
dest
=
'organizations_api_url'
,
type
=
str
,
default
=
''
,
help
=
'API endpoint for accessing Partner organization data.'
)
parser
.
add_argument
(
'--programs-api-url'
,
action
=
'store'
,
dest
=
'programs_api_url'
,
type
=
str
,
default
=
''
,
help
=
'API endpoint for accessing Partner program data.'
)
parser
.
add_argument
(
'--marketing-site-api-url'
,
action
=
'store'
,
dest
=
'marketing_site_api_url'
,
type
=
str
,
default
=
''
,
help
=
'API endpoint for accessing Partner marketing site data.'
)
parser
.
add_argument
(
'--marketing-site-url-root'
,
action
=
'store'
,
dest
=
'marketing_site_url_root'
,
type
=
str
,
default
=
''
,
help
=
'URL root for accessing Partner marketing site data.'
)
parser
.
add_argument
(
'--marketing-site-api-username'
,
action
=
'store'
,
dest
=
'marketing_site_api_username'
,
type
=
str
,
default
=
''
,
help
=
'Username used for accessing Partner marketing site data.'
)
parser
.
add_argument
(
'--marketing-site-api-password'
,
action
=
'store'
,
dest
=
'marketing_site_api_password'
,
type
=
str
,
default
=
''
,
help
=
'Password used for accessing Partner marketing site data.'
)
parser
.
add_argument
(
'--oidc-url-root'
,
action
=
'store'
,
dest
=
'oidc_url_root'
,
type
=
str
,
default
=
''
,
help
=
'URL root used for Partner OIDC workflows.'
)
parser
.
add_argument
(
'--oidc-key'
,
action
=
'store'
,
dest
=
'oidc_key'
,
type
=
str
,
default
=
''
,
help
=
'Key used for Partner OIDC workflows.'
)
parser
.
add_argument
(
'--oidc-secret'
,
action
=
'store'
,
dest
=
'oidc_secret'
,
type
=
str
,
default
=
''
,
help
=
'Key used for Partner OIDC workflows.'
)
def
handle
(
self
,
*
args
,
**
options
):
""" Creates or updates a Partner record. """
partner_code
=
options
.
get
(
'partner_code'
)
__
,
created
=
Partner
.
objects
.
update_or_create
(
short_code
=
partner_code
,
defaults
=
{
'name'
:
options
.
get
(
'partner_name'
),
'courses_api_url'
:
options
.
get
(
'courses_api_url'
),
'ecommerce_api_url'
:
options
.
get
(
'ecommerce_api_url'
),
'organizations_api_url'
:
options
.
get
(
'organizations_api_url'
),
'programs_api_url'
:
options
.
get
(
'programs_api_url'
),
'marketing_site_api_url'
:
options
.
get
(
'marketing_site_api_url'
),
'marketing_site_url_root'
:
options
.
get
(
'marketing_site_url_root'
),
'marketing_site_api_username'
:
options
.
get
(
'marketing_site_api_username'
),
'marketing_site_api_password'
:
options
.
get
(
'marketing_site_api_password'
),
'oidc_url_root'
:
options
.
get
(
'oidc_url_root'
),
'oidc_key'
:
options
.
get
(
'oidc_key'
),
'oidc_secret'
:
options
.
get
(
'oidc_secret'
),
}
)
logger
.
info
(
'Partner
%
s with code
%
s'
,
'created'
if
created
else
'updated'
,
partner_code
)
course_discovery/apps/core/management/commands/tests/__init__.py
0 → 100644
View file @
a36feacf
course_discovery/apps/core/management/commands/tests/test_create_or_update_partner.py
0 → 100644
View file @
a36feacf
from
__future__
import
unicode_literals
from
ddt
import
ddt
,
data
from
django.core.management
import
call_command
,
CommandError
from
django.test
import
TestCase
from
course_discovery.apps.core.models
import
Partner
@ddt
class
CreateOrUpdatePartnerCommandTests
(
TestCase
):
command_name
=
'create_or_update_partner'
def
setUp
(
self
):
super
(
CreateOrUpdatePartnerCommandTests
,
self
)
.
setUp
()
self
.
partner_code
=
'abc'
self
.
partner_name
=
'ABC Partner'
self
.
courses_api_url
=
'https://courses.fake.org/api/v1/courses/'
self
.
ecommerce_api_url
=
'https://ecommerce.fake.org/api/v1/courses/'
self
.
organizations_api_url
=
'https://orgs.fake.org/api/v1/organizations/'
self
.
programs_api_url
=
'https://programs.fake.org/api/v1/programs/'
self
.
marketing_site_api_url
=
'https://www.fake.org/api/v1/courses/'
self
.
marketing_site_url_root
=
'https://www.fake.org/'
self
.
marketing_site_api_username
=
'marketing-username'
self
.
marketing_site_api_password
=
'marketing-password'
self
.
oidc_url_root
=
'https://oidc.fake.org/'
self
.
oidc_key
=
'oidc-key'
self
.
oidc_secret
=
'oidc-secret'
def
_check_partner
(
self
,
partner
):
self
.
assertEqual
(
partner
.
short_code
,
self
.
partner_code
)
self
.
assertEqual
(
partner
.
name
,
self
.
partner_name
)
self
.
assertEqual
(
partner
.
courses_api_url
,
self
.
courses_api_url
)
self
.
assertEqual
(
partner
.
ecommerce_api_url
,
self
.
ecommerce_api_url
)
self
.
assertEqual
(
partner
.
organizations_api_url
,
self
.
organizations_api_url
)
self
.
assertEqual
(
partner
.
programs_api_url
,
self
.
programs_api_url
)
self
.
assertEqual
(
partner
.
marketing_site_api_url
,
self
.
marketing_site_api_url
)
self
.
assertEqual
(
partner
.
marketing_site_url_root
,
self
.
marketing_site_url_root
)
self
.
assertEqual
(
partner
.
marketing_site_api_username
,
self
.
marketing_site_api_username
)
self
.
assertEqual
(
partner
.
marketing_site_api_password
,
self
.
marketing_site_api_password
)
self
.
assertEqual
(
partner
.
oidc_url_root
,
self
.
oidc_url_root
)
self
.
assertEqual
(
partner
.
oidc_key
,
self
.
oidc_key
)
self
.
assertEqual
(
partner
.
oidc_secret
,
self
.
oidc_secret
)
def
_call_command
(
self
,
**
kwargs
):
"""
Internal helper method for interacting with the create_or_update_partner management command
"""
# Required arguments
command_args
=
[
'--code={partner_code}'
.
format
(
partner_code
=
kwargs
[
'partner_code'
]),
]
# Optional arguments
arg_map
=
{
'partner_name'
:
'name'
,
'courses_api_url'
:
'courses-api-url'
,
'ecommerce_api_url'
:
'ecommerce-api-url'
,
'organizations_api_url'
:
'organizations-api-url'
,
'programs_api_url'
:
'programs-api-url'
,
'marketing_site_api_url'
:
'marketing-site-api-url'
,
'marketing_site_url_root'
:
'marketing-site-url-root'
,
'marketing_site_api_username'
:
'marketing-site-api-username'
,
'marketing_site_api_password'
:
'marketing-site-api-password'
,
'oidc_url_root'
:
'oidc-url-root'
,
'oidc_key'
:
'oidc-key'
,
'oidc_secret'
:
'oidc-secret'
,
}
for
kwarg
,
value
in
kwargs
.
items
():
if
arg_map
.
get
(
kwarg
):
command_args
.
append
(
'--{arg}={value}'
.
format
(
arg
=
arg_map
[
kwarg
],
value
=
value
))
call_command
(
self
.
command_name
,
*
command_args
)
def
_create_partner
(
self
):
""" Helper method to create a new partner """
self
.
_call_command
(
partner_code
=
self
.
partner_code
,
partner_name
=
self
.
partner_name
,
courses_api_url
=
self
.
courses_api_url
,
ecommerce_api_url
=
self
.
ecommerce_api_url
,
organizations_api_url
=
self
.
organizations_api_url
,
programs_api_url
=
self
.
programs_api_url
,
marketing_site_api_url
=
self
.
marketing_site_api_url
,
marketing_site_url_root
=
self
.
marketing_site_url_root
,
marketing_site_api_username
=
self
.
marketing_site_api_username
,
marketing_site_api_password
=
self
.
marketing_site_api_password
,
oidc_url_root
=
self
.
oidc_url_root
,
oidc_key
=
self
.
oidc_key
,
oidc_secret
=
self
.
oidc_secret
,
)
def
test_create_partner
(
self
):
""" Verify the command creates a new Partner. """
partners
=
Partner
.
objects
.
all
()
self
.
assertEqual
(
partners
.
count
(),
0
)
self
.
_create_partner
()
partner
=
Partner
.
objects
.
get
(
short_code
=
self
.
partner_code
)
self
.
_check_partner
(
partner
)
def
test_update_partner
(
self
):
""" Verify the command updates an existing Partner """
self
.
_create_partner
()
self
.
partner_name
=
'Updated Partner'
self
.
courses_api_url
=
'https://courses.updated.org/api/v1/courses/'
self
.
ecommerce_api_url
=
'https://ecommerce.updated.org/api/v1/courses/'
self
.
organizations_api_url
=
'https://orgs.updated.org/api/v1/organizations/'
self
.
programs_api_url
=
'https://programs.updated.org/api/v1/programs/'
self
.
marketing_site_api_url
=
'https://www.updated.org/api/v1/courses/'
self
.
marketing_site_url_root
=
'https://www.updated.org/'
self
.
marketing_site_api_username
=
'updated-username'
self
.
marketing_site_api_password
=
'updated-password'
self
.
oidc_url_root
=
'https://oidc.updated.org/'
self
.
oidc_key
=
'updated-key'
self
.
oidc_secret
=
'updated-secret'
self
.
_call_command
(
partner_code
=
self
.
partner_code
,
partner_name
=
self
.
partner_name
,
courses_api_url
=
self
.
courses_api_url
,
ecommerce_api_url
=
self
.
ecommerce_api_url
,
organizations_api_url
=
self
.
organizations_api_url
,
programs_api_url
=
self
.
programs_api_url
,
marketing_site_api_url
=
self
.
marketing_site_api_url
,
marketing_site_url_root
=
self
.
marketing_site_url_root
,
marketing_site_api_username
=
self
.
marketing_site_api_username
,
marketing_site_api_password
=
self
.
marketing_site_api_password
,
oidc_url_root
=
self
.
oidc_url_root
,
oidc_key
=
self
.
oidc_key
,
oidc_secret
=
self
.
oidc_secret
,
)
partner
=
Partner
.
objects
.
get
(
short_code
=
self
.
partner_code
)
self
.
_check_partner
(
partner
)
@data
(
[
''
],
[
'--code="xyz"'
],
# Raises error because 'name' is not provided
[
'--name="XYZ Partner"'
]
# Raises error because 'code' is not provided
)
def
test_missing_required_arguments
(
self
,
command_args
):
""" Verify CommandError is raised when required arguments are missing """
# If a required argument is not specified the system should raise a CommandError
with
self
.
assertRaises
(
CommandError
):
call_command
(
self
.
command_name
,
*
command_args
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment