Fixing up cms tests to only use data in common/test/data
This commit is contained in:
@@ -193,6 +193,7 @@ class EditTestCase(ContentStoreTestCase):
|
||||
self.activate_user(email)
|
||||
self.login(email, password)
|
||||
xmodule.modulestore.django._MODULESTORES = {}
|
||||
xmodule.modulestore.django.modulestore().collection.drop()
|
||||
|
||||
def check_edit_item(self, test_course_name):
|
||||
import_from_xml('common/test/data/', test_course_name)
|
||||
|
||||
@@ -22,9 +22,21 @@ TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
||||
TEST_ROOT = path('test_root')
|
||||
|
||||
# Want static files in the same dir for running on jenkins.
|
||||
STATIC_ROOT = TEST_ROOT / "staticfiles"
|
||||
STATIC_ROOT = TEST_ROOT / "staticfiles"
|
||||
|
||||
GITHUB_REPO_ROOT = TEST_ROOT / "data"
|
||||
COMMON_TEST_DATA_ROOT = COMMON_ROOT / "test" / "data"
|
||||
|
||||
# TODO (cpennington): We need to figure out how envs/test.py can inject things into common.py so that we don't have to repeat this sort of thing
|
||||
STATICFILES_DIRS = [
|
||||
COMMON_ROOT / "static",
|
||||
PROJECT_ROOT / "static",
|
||||
]
|
||||
STATICFILES_DIRS += [
|
||||
(course_dir, COMMON_TEST_DATA_ROOT / course_dir)
|
||||
for course_dir in os.listdir(COMMON_TEST_DATA_ROOT)
|
||||
if os.path.isdir(COMMON_TEST_DATA_ROOT / course_dir)
|
||||
]
|
||||
|
||||
MODULESTORE = {
|
||||
'default': {
|
||||
|
||||
|
Before Width: | Height: | Size: 185 B After Width: | Height: | Size: 185 B |
@@ -1 +1 @@
|
||||
Lecture Slides Handout [<a href="/static/handouts/6002-L${lecnum}-oei12-gaps.pdf">Clean </a>][<a href="/static/handouts/6002-L${lecnum}-oei12-gaps-annotated.pdf">Annotated</a>]
|
||||
Lecture Slides Handout [<a href="">Clean </a>][<a href="">Annotated</a>]
|
||||
|
||||
BIN
common/test/data/full/handouts/schematic_tutorial.pdf
Normal file
BIN
common/test/data/full/handouts/schematic_tutorial.pdf
Normal file
Binary file not shown.
@@ -1,119 +0,0 @@
|
||||
<header>
|
||||
<h1> Handouts </h1>
|
||||
</header>
|
||||
|
||||
<ol class="treeview-handoutsnav">
|
||||
<li> <a href="/static/handouts/syllabus.pdf"> Syllabus </a></li>
|
||||
<li> <a href="/static/handouts/calendar.pdf"> 6.002x At-A-Glance (calendar) </a></li>
|
||||
<li> <a href="/wiki/view/StaffListing"> Staff Listing </a></li>
|
||||
<li> <a href="/wiki/view/MathReview"> Math Review </a></li>
|
||||
<li> <a href="/static/handouts/schematic_tutorial.pdf"> Using the Interactive Laboratory </a></li>
|
||||
<li> <a href="/static/handouts/SystemTools.pdf"> How to Use the System</a></li>
|
||||
<li> <a href="/wiki/view/QuestionAnswerFAQ"> How to Use the Question/Answer forum </a></li>
|
||||
|
||||
<li>
|
||||
<h4>Lecture Slides</h4>
|
||||
<ul>
|
||||
<li>
|
||||
<h3>S1 - Administrivia and Circuit Elements</h3>
|
||||
<p><a href="/static/handouts/6002-L1-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L1-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>S2 - Circuit Analysis Toolchest</h3>
|
||||
<p><a href="/static/handouts/6002-L2-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L2-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>S3 - Linearity and Superposition</h3>
|
||||
<p><a href="/static/handouts/6002-L3-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L3-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>S4 - Static Discipline and Boolean Logic</h3>
|
||||
<p><a href="/static/handouts/6002-L4-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L4-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S5 - Inside the Gate</h3>
|
||||
<p><a href="/static/handouts/6002-L5-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L5-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S6 - Circuits with Nonlinear Elements</h3>
|
||||
<p><a href="/static/handouts/6002-L6-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L6-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S7 - Incremental Analysis </h3>
|
||||
<p><a href="/static/handouts/6002-L7-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L7-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S8 - Dependent Sources and Amplifiers </h3>
|
||||
<p><a href="/static/handouts/6002-L8-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L8-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S9 - MOSFETs: Large Signals</h3>
|
||||
<p><a href="/static/handouts/6002-L9-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L9-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S10 - MOSFET Amplifiers: Small Signal Model</h3>
|
||||
<p><a href="/static/handouts/6002-L10-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L10-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S11 - Small-Signal Circuit Models</h3>
|
||||
<p><a href="/static/handouts/6002-L11-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L11-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S12 - Capacitors and First-Order Circuits</h3>
|
||||
<p><a href="/static/handouts/6002-L12-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L12-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S13 - Inductors and First-Order Circuits</h3>
|
||||
<p><a href="/static/handouts/6002-L13-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L13-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S14 - Speed of Digital Circuits</h3>
|
||||
<p><a href="/static/handouts/6002-L14-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L14-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S15 - Ramps, Steps, and Impulses</h3>
|
||||
<p><a href="/static/handouts/6002-L15-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L15-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S16 - State and Memory</h3>
|
||||
<p><a href="/static/handouts/6002-L16-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L16-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S17 - Undamped Second-Order Systems</h3>
|
||||
<p><a href="/static/handouts/6002-L17-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L17-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S18 - Damped Second-Order Systems</h3>
|
||||
<p><a href="/static/handouts/6002-L18-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L18-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S19 - Sinusoidal Steady State</h3>
|
||||
<p><a href="/static/handouts/6002-L19-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L19-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S20 - The Impedance Model</h3>
|
||||
<p><a href="/static/handouts/6002-L20-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L20-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S21 - Filters</h3>
|
||||
<p><a href="/static/handouts/6002-L21-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L21-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S22 - Time Domain Versus Frequency Domain Analysis</h3>
|
||||
<p><a href="/static/handouts/6002-L22-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L22-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S23 - The Operational Amplifier Abstraction</h3>
|
||||
<p><a href="/static/handouts/6002-L23-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L23-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S24 - Operational Amplifier Circuits</h3>
|
||||
<p><a href="/static/handouts/6002-L24-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L24-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
@@ -1,169 +0,0 @@
|
||||
<header>
|
||||
<h1> Handouts </h1>
|
||||
</header>
|
||||
|
||||
<ol class="treeview-handoutsnav">
|
||||
<li> <a href="/static/handouts/syllabus.pdf"> Syllabus </a></li>
|
||||
<li> <a href="/static/handouts/calendar.pdf"> 6.002x At-A-Glance (calendar) </a></li>
|
||||
<li> <a href="/wiki/view/StaffListing"> Staff Listing </a></li>
|
||||
<li> <a href="/wiki/view/MathReview"> Math Review </a></li>
|
||||
<li> <a href="/static/handouts/schematic_tutorial.pdf"> Using the Interactive Laboratory </a></li>
|
||||
<li> <a href="/static/handouts/SystemTools.pdf"> How to Use the System</a></li>
|
||||
<li> <a href="/wiki/view/QuestionAnswerFAQ"> How to Use the Question/Answer forum </a></li>
|
||||
|
||||
<li>
|
||||
<h4>Lecture Slides</h4>
|
||||
<ul>
|
||||
<li>
|
||||
<h3>S1 - Administrivia and Circuit Elements</h3>
|
||||
<p><a href="/static/handouts/6002-L1-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L1-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>S2 - Circuit Analysis Toolchest</h3>
|
||||
<p><a href="/static/handouts/6002-L2-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L2-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>S3 - Linearity and Superposition</h3>
|
||||
<p><a href="/static/handouts/6002-L3-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L3-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>S4 - Static Discipline and Boolean Logic</h3>
|
||||
<p><a href="/static/handouts/6002-L4-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L4-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S5 - Inside the Gate</h3>
|
||||
<p><a href="/static/handouts/6002-L5-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L5-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S6 - Circuits with Nonlinear Elements</h3>
|
||||
<p><a href="/static/handouts/6002-L6-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L6-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S7 - Incremental Analysis </h3>
|
||||
<p><a href="/static/handouts/6002-L7-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L7-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S8 - Dependent Sources and Amplifiers </h3>
|
||||
<p><a href="/static/handouts/6002-L8-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L8-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S9 - MOSFETs: Large Signals</h3>
|
||||
<p><a href="/static/handouts/6002-L9-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L9-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S10 - MOSFET Amplifiers: Small Signal Model</h3>
|
||||
<p><a href="/static/handouts/6002-L10-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L10-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S11 - Small-Signal Circuit Models</h3>
|
||||
<p><a href="/static/handouts/6002-L11-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L11-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S12 - Capacitors and First-Order Circuits</h3>
|
||||
<p><a href="/static/handouts/6002-L12-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L12-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S13 - Inductors and First-Order Circuits</h3>
|
||||
<p><a href="/static/handouts/6002-L13-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L13-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S14 - Speed of Digital Circuits</h3>
|
||||
<p><a href="/static/handouts/6002-L14-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L14-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S15 - Ramps, Steps, and Impulses</h3>
|
||||
<p><a href="/static/handouts/6002-L15-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L15-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S16 - State and Memory</h3>
|
||||
<p><a href="/static/handouts/6002-L16-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L16-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S17 - Undamped Second-Order Systems</h3>
|
||||
<p><a href="/static/handouts/6002-L17-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L17-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S18 - Damped Second-Order Systems</h3>
|
||||
<p><a href="/static/handouts/6002-L18-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L18-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S19 - Sinusoidal Steady State</h3>
|
||||
<p><a href="/static/handouts/6002-L19-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L19-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S20 - The Impedance Model</h3>
|
||||
<p><a href="/static/handouts/6002-L20-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L20-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S21 - Filters</h3>
|
||||
<p><a href="/static/handouts/6002-L21-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L21-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>S22 - Time Domain Versus Frequency Domain Analysis</h3>
|
||||
<p><a href="/static/handouts/6002-L22-oei12-gaps.pdf">Clean </a> <a href="/static/handouts/6002-L22-oei12-gaps-annotated.pdf">Annotated</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Weekly solutions</h4>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<h3>Week 1 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week1Ex.pdf">Exercises </a> <a href="/static/handouts/solutions/Week1HW.pdf">Homework</a> <a href="/static/handouts/solutions/Week1Lab.pdf">Lab</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>Week 2 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week2Ex.pdf">Exercises </a> <a href="/static/handouts/solutions/Week2HW.pdf">Homework</a> <a href="/static/handouts/solutions/Week2Lab2B.pdf">Lab</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>Week 3 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week3Ex.pdf">Exercises </a> <a href="/static/handouts/solutions/Week3HW.pdf">Homework</a> <a href="/static/handouts/solutions/Week3Lab.pdf">Lab</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>Week 4 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week4Ex.pdf">Exercises </a> <a href="/static/handouts/solutions/Week4HW.pdf">Homework</a> <a href="/static/handouts/solutions/Week4Lab.pdf">Lab</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>Week 5 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week5Ex.pdf">Exercises </a><a href="/static/handouts/solutions/Week5HW.pdf">Homework</a> <a href="/static/handouts/solutions/Week5Lab.pdf">Lab</a></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>Week 6 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week6Ex.pdf">Exercises </a><a href="/static/handouts/solutions/Week6HW.pdf">Homework</a> <a href="/static/handouts/solutions/Week6Lab.pdf">Lab</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Week 7 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week7Ex.pdf">Exercises </a><a href="/static/handouts/solutions/Week7HW.pdf">Homework</a> <a href="/static/handouts/solutions/Week7Lab.pdf">Lab</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Week 8 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week8Ex.pdf">Exercises </a><a href="/static/handouts/solutions/Week8HW.pdf">Homework</a> <a href="/static/handouts/solutions/Week8Lab.pdf">Lab</a></p>
|
||||
<li>
|
||||
<h3>Week 9 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week9Ex.pdf">Exercises </a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Week 10 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week10Ex.pdf">Exercises </a></p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Week 11 Solutions</h3>
|
||||
<p><a href="/static/handouts/solutions/Week11Ex.pdf">Exercises </a></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Midterm Review Problems </h3>
|
||||
<p><a href="/static/handouts/6002x-MidTermReview-S2012-clean.pdf">Clean </a> <a href="/static/handouts/6002x-MidTermReview-S2012.pdf">With Solutions</a></p>
|
||||
</li>
|
||||
<li> <a href="/static/handouts/solutions/Midterm.pdf"> Midterm Solutions </a></li>
|
||||
</ol>
|
||||
@@ -46,6 +46,19 @@ LOGGING = get_logger_config(TEST_ROOT / "log",
|
||||
tracking_filename="tracking.log",
|
||||
debug=True)
|
||||
|
||||
COMMON_TEST_DATA_ROOT = COMMON_ROOT / "test" / "data"
|
||||
|
||||
# TODO (cpennington): We need to figure out how envs/test.py can inject things into common.py so that we don't have to repeat this sort of thing
|
||||
STATICFILES_DIRS = [
|
||||
COMMON_ROOT / "static",
|
||||
PROJECT_ROOT / "static",
|
||||
]
|
||||
STATICFILES_DIRS += [
|
||||
(course_dir, COMMON_TEST_DATA_ROOT / course_dir)
|
||||
for course_dir in os.listdir(COMMON_TEST_DATA_ROOT)
|
||||
if os.path.isdir(COMMON_TEST_DATA_ROOT / course_dir)
|
||||
]
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
|
||||
Reference in New Issue
Block a user