Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
assignments_new
Project
Project
Details
Activity
Releases
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
Suresh Kumar
assignments_new
Commits
1c664372
Commit
1c664372
authored
Jul 27, 2022
by
Suresh Kumar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Unit-Testing
parent
6c965654
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
627 additions
and
2 deletions
+627
-2
pom.xml
JunitTestingWithCrudOperation/pom.xml
+85
-0
CourseController.java
...n/java/com/crudoperation/Controller/CourseController.java
+49
-0
StudentController.java
.../java/com/crudoperation/Controller/StudentController.java
+50
-0
JunitTestingApplication.java
.../main/java/com/crudoperation/JunitTestingApplication.java
+14
-0
Course.java
...eration/src/main/java/com/crudoperation/Model/Course.java
+37
-0
Student.java
...ration/src/main/java/com/crudoperation/Model/Student.java
+42
-0
CourseRepository.java
...n/java/com/crudoperation/Repository/CourseRepository.java
+12
-0
StudentRepository.java
.../java/com/crudoperation/Repository/StudentRepository.java
+15
-0
CourseService.java
...rc/main/java/com/crudoperation/Service/CourseService.java
+25
-0
CourseServiceImpl.java
...ain/java/com/crudoperation/Service/CourseServiceImpl.java
+48
-0
StudentService.java
...c/main/java/com/crudoperation/Service/StudentService.java
+26
-0
StudentServiceImpl.java
...in/java/com/crudoperation/Service/StudentServiceImpl.java
+49
-0
application.properties
...thCrudOperation/src/main/resources/application.properties
+10
-0
JunitTestingApplicationTests.java
.../java/com/crudoperation/JunitTestingApplicationTests.java
+13
-0
CourseServiceImplTest.java
...java/com/crudoperation/Service/CourseServiceImplTest.java
+71
-0
StudentServiceImplTest.java
...ava/com/crudoperation/Service/StudentServiceImplTest.java
+81
-0
README.md
README.md
+0
-2
No files found.
JunitTestingWithCrudOperation/pom.xml
0 → 100644
View file @
1c664372
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.7.1
</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>
com.crudoperation
</groupId>
<artifactId>
demo
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<name>
JunitTesting
</name>
<description>
Unit Testing
</description>
<properties>
<java.version>
1.8
</java.version>
<junit-platform.version>
5.5.2
</junit-platform.version>
</properties>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-jpa
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<scope>
runtime
</scope>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.junit.jupiter
</groupId>
<artifactId>
junit-jupiter-engine
</artifactId>
<version>
${junit-jupiter.version}
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Controller/CourseController.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Controller
;
import
java.util.List
;
import
com.crudoperation.Model.Course
;
import
com.crudoperation.Service.CourseService
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PutMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.beans.factory.annotation.Autowired
;
@RestController
public
class
CourseController
{
@Autowired
CourseService
courseService
;
@GetMapping
(
"/courses"
)
public
List
<
Course
>
getAllStudents
()
{
return
this
.
courseService
.
getAllCourses
();
}
@GetMapping
(
"/courses/{id}"
)
public
Course
getCourseByID
(
@PathVariable
(
"id"
)
int
cid
)
{
return
this
.
courseService
.
getCourseByID
(
cid
);
}
@PostMapping
(
"/courses"
)
public
Course
addCourse
(
@RequestBody
Course
course
)
{
Course
co
=
this
.
courseService
.
addCourse
(
course
);
return
co
;
}
@PutMapping
(
"/courses/{courseId}"
)
public
Course
updateCourse
(
@RequestBody
Course
course
,
@PathVariable
(
"courseId"
)
int
courseId
)
{
this
.
courseService
.
updateCourse
(
course
,
courseId
);
return
course
;
}
@DeleteMapping
(
"/courses/{courseId}"
)
public
void
deleteCourse
(
@PathVariable
(
"courseId"
)
int
courseId
)
{
this
.
courseService
.
deleteCourseById
(
courseId
);
}
}
\ No newline at end of file
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Controller/StudentController.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Controller
;
import
java.util.List
;
import
com.crudoperation.Model.Student
;
import
com.crudoperation.Service.StudentService
;
import
org.springframework.web.bind.annotation.PutMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.beans.factory.annotation.Autowired
;
@RestController
public
class
StudentController
{
@Autowired
StudentService
studentService
;
@GetMapping
(
"/students"
)
public
List
<
Student
>
getAllStudents
()
{
return
this
.
studentService
.
getAllStudents
();
}
@GetMapping
(
"/students/{id}"
)
public
Student
getStudentByID
(
@PathVariable
(
"id"
)
int
id
)
{
return
this
.
studentService
.
getStudentByID
(
id
);
}
@PostMapping
(
"/students"
)
public
Student
addStudent
(
@RequestBody
Student
student
)
{
Student
st
=
this
.
studentService
.
addStudent
(
student
);
return
st
;
}
@PutMapping
(
"/students/{studentId}"
)
public
Student
updateStudent
(
@RequestBody
Student
student
,
@PathVariable
(
"studentId"
)
int
studentId
)
{
this
.
studentService
.
updateStudent
(
student
,
studentId
);
return
student
;
}
@DeleteMapping
(
"/students/{studentId}"
)
public
void
deleteStudent
(
@PathVariable
(
"studentId"
)
int
studentId
)
{
this
.
studentService
.
deleteStudentById
(
studentId
);
}
}
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/JunitTestingApplication.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
JunitTestingApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
JunitTestingApplication
.
class
,
args
);
System
.
out
.
println
(
"Project Started....................!!"
);
}
}
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Model/Course.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Model
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.List
;
import
lombok.ToString
;
import
java.util.ArrayList
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
javax.persistence.Entity
;
import
lombok.NoArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
javax.persistence.JoinColumn
;
import
javax.persistence.ManyToMany
;
import
javax.persistence.JoinTable
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table
(
name
=
"course"
)
public
class
Course
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
private
Integer
cid
;
private
String
cname
;
// @ManyToMany
// @JoinTable(name="student_course", joinColumns=@JoinColumn(name="cid"),
// inverseJoinColumns=@JoinColumn(name="sid"))
// private List <Student> students = new ArrayList<>();
}
\ No newline at end of file
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Model/Student.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Model
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.List
;
import
lombok.ToString
;
import
java.util.ArrayList
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
javax.persistence.Entity
;
import
lombok.NoArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
javax.persistence.ManyToMany
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table
(
name
=
"student"
)
public
class
Student
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
private
Integer
sid
;
private
String
rno
;
private
String
name
;
public
Student
(
String
rno
,
String
name
){
this
.
rno
=
rno
;
this
.
name
=
name
;
}
// @ManyToMany(mappedBy ="students")
// private List<Course> courses = new ArrayList<>();
}
\ No newline at end of file
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Repository/CourseRepository.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Repository
;
import
org.springframework.data.repository.CrudRepository
;
import
org.springframework.stereotype.Repository
;
import
com.crudoperation.Model.Course
;
@Repository
public
interface
CourseRepository
extends
CrudRepository
<
Course
,
Integer
>{
Course
findById
(
int
cid
);
}
\ No newline at end of file
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Repository/StudentRepository.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Repository
;
import
org.springframework.data.repository.CrudRepository
;
import
org.springframework.stereotype.Repository
;
import
com.crudoperation.Model.Student
;
@Repository
public
interface
StudentRepository
extends
CrudRepository
<
Student
,
Integer
>{
Student
findById
(
int
sid
);
Student
findByName
(
String
name
);
Student
deleteById
(
int
id
);
}
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Service/CourseService.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Service
;
import
java.util.List
;
import
com.crudoperation.Model.Course
;
public
interface
CourseService
{
public
List
<
Course
>
getAllCourses
();
// Students get by id
public
Course
getCourseByID
(
int
cid
);
// Add student records
public
Course
addCourse
(
Course
co
);
//Delete by id
public
void
deleteCourseById
(
int
coid
);
// Update records
public
Course
updateCourse
(
Course
course
,
int
CourseId
);
}
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Service/CourseServiceImpl.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Service
;
import
java.util.List
;
import
com.crudoperation.Model.Course
;
import
org.springframework.stereotype.Service
;
import
com.crudoperation.Repository.CourseRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
@Service
public
class
CourseServiceImpl
implements
CourseService
{
@Autowired
private
CourseRepository
crepo
;
@Override
public
List
<
Course
>
getAllCourses
()
{
List
<
Course
>
list
=
(
List
<
Course
>)
crepo
.
findAll
();
return
list
;
}
@Override
public
Course
getCourseByID
(
int
cid
)
{
Course
course
=
null
;
course
=
crepo
.
findById
(
cid
);
return
course
;
}
@Override
public
Course
addCourse
(
Course
co
)
{
crepo
.
save
(
co
);
return
co
;
}
@Override
public
void
deleteCourseById
(
int
coid
)
{
this
.
crepo
.
deleteById
(
coid
);
}
@Override
public
Course
updateCourse
(
Course
course
,
int
CourseId
)
{
course
.
setCid
(
CourseId
);
Course
course1
=
crepo
.
save
(
course
);
return
course1
;
}
}
\ No newline at end of file
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Service/StudentService.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Service
;
import
java.util.List
;
import
com.crudoperation.Model.Student
;
public
interface
StudentService
{
//Get All Students
public
List
<
Student
>
getAllStudents
();
// Students get by id
public
Student
getStudentByID
(
int
id
);
// Add student records
public
Student
addStudent
(
Student
st
);
//Delete by id
public
void
deleteStudentById
(
int
ssid
);
// Update records
public
Student
updateStudent
(
Student
student
,
int
studentId
);
}
\ No newline at end of file
JunitTestingWithCrudOperation/src/main/java/com/crudoperation/Service/StudentServiceImpl.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Service
;
import
java.util.List
;
import
org.springframework.stereotype.Service
;
import
com.crudoperation.Model.Student
;
import
com.crudoperation.Repository.StudentRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
@Service
public
class
StudentServiceImpl
implements
StudentService
{
@Autowired
private
StudentRepository
studentRepository
;
@Override
public
List
<
Student
>
getAllStudents
()
{
List
<
Student
>
list
=
(
List
<
Student
>)
studentRepository
.
findAll
();
return
list
;
}
@Override
public
Student
getStudentByID
(
int
id
)
{
Student
student
=
null
;
student
=
studentRepository
.
findById
(
id
);
return
student
;
}
@Override
public
Student
addStudent
(
Student
st
)
{
Student
student
=
studentRepository
.
save
(
st
);
return
student
;
}
@Override
public
void
deleteStudentById
(
int
ssid
)
{
this
.
studentRepository
.
deleteById
(
ssid
);
}
@Override
public
Student
updateStudent
(
Student
student
,
int
studentId
)
{
student
.
setSid
(
studentId
);
Student
st
=
studentRepository
.
save
(
student
);
return
st
;
}
}
JunitTestingWithCrudOperation/src/main/resources/application.properties
0 → 100644
View file @
1c664372
server.port
=
8083
spring.datasource.name
=
TestingPractice
spring.datasource.url
=
jdbc:mysql://localhost:3306/TestingPractice?characterEncoding=utf8
spring.datasource.username
=
root
spring.datasource.password
=
nisum123
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect
=
org.hibernate.dialect.MySQL55Dialect
spring.jpa.generate-ddl
=
true
spring.jpa.hibernate.ddl-auto
=
update
JunitTestingWithCrudOperation/src/test/java/com/crudoperation/JunitTestingApplicationTests.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.test.context.SpringBootTest
;
@SpringBootTest
class
JunitTestingApplicationTests
{
@Test
void
contextLoads
()
{
}
}
JunitTestingWithCrudOperation/src/test/java/com/crudoperation/Service/CourseServiceImplTest.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Service
;
import
com.crudoperation.Model.Course
;
import
com.crudoperation.Model.Student
;
import
com.crudoperation.Repository.CourseRepository
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.extension.ExtendWith
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.Mockito
;
import
org.mockito.junit.jupiter.MockitoExtension
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
import
static
org
.
mockito
.
Mockito
.*;
@ExtendWith
(
MockitoExtension
.
class
)
class
CourseServiceImplTest
{
@InjectMocks
private
CourseServiceImpl
courseServiceImpl
;
@Mock
private
CourseRepository
courseRepository
;
@Test
void
getAllCourses
()
{
when
(
courseRepository
.
findAll
()).
thenReturn
(
Stream
.
of
(
new
Course
(
1
,
"Java"
),
new
Course
(
2
,
"Python"
)).
collect
(
Collectors
.
toList
()));
assertEquals
(
2
,
courseServiceImpl
.
getAllCourses
().
size
());
}
@Test
void
getCourseByID
()
{
Course
course
=
new
Course
(
3
,
"JavaScript"
);
when
(
courseRepository
.
findById
(
3
)).
thenReturn
(
course
);
Course
courseResult
=
courseServiceImpl
.
getCourseByID
(
3
);
assertEquals
(
course
,
courseResult
);
}
@Test
void
addCourse
()
{
Course
courseadd
=
new
Course
(
4
,
"PHP"
);
when
(
courseRepository
.
save
(
courseadd
)).
thenReturn
(
courseadd
);
Course
courseadded
=
courseServiceImpl
.
addCourse
(
courseadd
);
assertEquals
(
courseadd
,
courseadd
);
}
//
@Test
void
deleteCourseById
()
{
Course
coursedelete
=
new
Course
(
5
,
"JQuery"
);
courseServiceImpl
.
deleteCourseById
(
coursedelete
.
getCid
());
verify
(
courseRepository
,
times
(
1
)).
deleteById
(
5
);
}
@Test
void
updateCourse
()
{
Course
course
=
new
Course
();
course
.
setCid
(
6
);
course
.
setCname
(
"Automation"
);
Mockito
.
when
(
courseRepository
.
save
(
course
)).
thenReturn
(
null
);
course
.
setCname
(
"C++"
);
Mockito
.
when
(
courseRepository
.
save
(
course
)).
thenReturn
(
course
);
assertEquals
(
course
,
courseServiceImpl
.
updateCourse
(
course
,
course
.
getCid
()));
}
}
\ No newline at end of file
JunitTestingWithCrudOperation/src/test/java/com/crudoperation/Service/StudentServiceImplTest.java
0 → 100644
View file @
1c664372
package
com
.
crudoperation
.
Service
;
import
org.junit.jupiter.api.Assertions
;
import
org.mockito.Mock
;
import
org.mockito.InjectMocks
;
import
java.util.stream.Stream
;
import
org.junit.jupiter.api.Test
;
import
java.util.stream.Collectors
;
import
static
org
.
assertj
.
core
.
api
.
AssertionsForClassTypes
.
assertThat
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertFalse
;
import
com.crudoperation.Model.Student
;
import
org.junit.jupiter.api.extension.ExtendWith
;
import
org.mockito.Mockito
;
import
org.mockito.junit.jupiter.MockitoExtension
;
import
com.crudoperation.Repository.StudentRepository
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertEquals
;
import
static
org
.
mockito
.
Mockito
.*;
import
com.crudoperation.Model.Student
;
@ExtendWith
(
MockitoExtension
.
class
)
class
StudentServiceImplTest
{
@InjectMocks
private
StudentServiceImpl
studentServiceImpl
;
@Mock
private
StudentRepository
studentRepository
;
@Test
public
void
getAllStudents
()
{
when
(
studentRepository
.
findAll
()).
thenReturn
(
Stream
.
of
(
new
Student
(
1
,
"101"
,
"Suresh"
),
new
Student
(
2
,
"102"
,
"Rayyan Hasan"
)).
collect
(
Collectors
.
toList
()));
assertEquals
(
2
,
studentServiceImpl
.
getAllStudents
().
size
());
}
@Test
void
getStudentByID
()
{
Student
s3
=
new
Student
(
3
,
"103"
,
"M_Ameen"
);
when
(
studentRepository
.
findById
(
3
)).
thenReturn
(
s3
);
Student
studentResult
=
studentServiceImpl
.
getStudentByID
(
3
);
assertEquals
(
s3
,
studentResult
);
}
@Test
void
addStudent
()
{
//GIVEN
Student
st2
=
new
Student
(
2
,
"102"
,
"Rayyan Hasan"
);
when
(
studentRepository
.
save
(
st2
)).
thenReturn
(
st2
);
//WHEN
Student
studentResult
=
studentServiceImpl
.
addStudent
(
st2
);
//THEN
assertEquals
(
st2
,
studentResult
);
}
@Test
void
updateStudent
()
{
Student
student
=
new
Student
();
student
.
setSid
(
3
);
student
.
setRno
(
"103"
);
student
.
setName
(
"Danish"
);
Mockito
.
when
(
studentRepository
.
save
(
student
)).
thenReturn
(
null
);
// Assertions.assertEquals(student, student.getSid());
student
.
setName
(
"Suresh"
);
Mockito
.
when
(
studentRepository
.
save
(
student
)).
thenReturn
(
student
);
assertEquals
(
student
,
studentServiceImpl
.
updateStudent
(
student
,
student
.
getSid
()));
}
@Test
public
void
deleteStudentById
()
{
Student
studentdelete
=
new
Student
(
5
,
"105"
,
"Suresh Kumar"
);
studentServiceImpl
.
deleteStudentById
(
studentdelete
.
getSid
());
verify
(
studentRepository
,
times
(
1
)).
deleteById
(
5
);
}
}
\ No newline at end of file
README.md
deleted
100644 → 0
View file @
6c965654
# assignments_new
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