Compare commits
	
		
			50 Commits
		
	
	
		
			token-rele
			...
			refresh-to
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						165dee5bd2
	
				 | 
					
					
						|||
| 76cf5c8e96 | |||
| 
						 | 
					6eac8e6266 | ||
| 
						 | 
					61c5a43192 | ||
| 
						 | 
					7f630ccdac | ||
| 
						 | 
					64447b61c8 | ||
| 
						 | 
					7584f3600f | ||
| e18f285dd6 | |||
| 
						 | 
					28c09bea6e | ||
| 
						 | 
					a294ecac37 | ||
| 0d6ad184bc | |||
| 
						 | 
					dfae6d7c78 | ||
| 
						 | 
					c62674b9d8 | ||
| 
						 | 
					8dc94f84c0 | ||
| 48c23ad4f8 | |||
| 
						 | 
					b93d44346c | ||
| 
						 | 
					4a12dceab6 | ||
| 
						 | 
					ce0d63d7f9 | ||
| 
						 | 
					300130af7e | ||
| 
						 | 
					5ef7c19ade | ||
| ca440a3fd5 | |||
| 
						 | 
					ffc4f4709b | ||
| 
						 | 
					84d7ed8e65 | ||
| 
						 | 
					e02523b4f4 | ||
| 
						 | 
					5a1108e1bf | ||
| 
						 | 
					15533525af | ||
| 
						 | 
					d2a679fb22 | ||
| 
						 | 
					e9927f832d | ||
| 
						 | 
					98bbc1aac6 | ||
| 
						 | 
					a6acab932c | ||
| 
						 | 
					831358128e | ||
| 
						 | 
					dfe534a835 | ||
| 
						 | 
					7c457ce232 | ||
| 
						 | 
					f31a50aa06 | ||
| 
						 | 
					52abb281ff | ||
| 
						 | 
					0b807e355c | ||
| 
						 | 
					062b02da6c | ||
| 
						 | 
					0cee454356 | ||
| 
						 | 
					f08e7cf1e5 | ||
| 
						 | 
					7c0c22e790 | ||
| 
						
						
							
						
						1cdb301adf
	
				 | 
					
					
						|||
| c1dce7d3bb | |||
| 
						
						
							
						
						2921c98c35
	
				 | 
					
					
						|||
| 
						
						
							
						
						181d93082c
	
				 | 
					
					
						|||
| 
						
						
							
						
						b495fd7f65
	
				 | 
					
					
						|||
| 
						
						
							
						
						086e4be458
	
				 | 
					
					
						|||
| 
						
						
							
						
						0c471162f2
	
				 | 
					
					
						|||
| 
						
						
							
						
						9f3e41e601
	
				 | 
					
					
						|||
| 
						
						
							
						
						d85cdb9b22
	
				 | 
					
					
						|||
| 
						 | 
					b1091cd3bc | 
							
								
								
									
										42
									
								
								.gitlab-ci.yml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								.gitlab-ci.yml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
stages:
 | 
			
		||||
  - build
 | 
			
		||||
  - deploy
 | 
			
		||||
 | 
			
		||||
build:
 | 
			
		||||
  stage: build
 | 
			
		||||
  image: maven
 | 
			
		||||
  script:
 | 
			
		||||
    - echo "Start building App"
 | 
			
		||||
    - echo "spring.profiles.active=prod" > restservice/src/main/resources/application.properties
 | 
			
		||||
    - mvn clean
 | 
			
		||||
    - mvn install
 | 
			
		||||
    - cd restservice
 | 
			
		||||
    - mvn clean package spring-boot:repackage
 | 
			
		||||
    - echo "Build successfully!"
 | 
			
		||||
  artifacts:
 | 
			
		||||
    expire_in: 1 hour
 | 
			
		||||
    paths:
 | 
			
		||||
      - restservice/target/
 | 
			
		||||
  only:
 | 
			
		||||
    - master
 | 
			
		||||
 | 
			
		||||
deploy_production:
 | 
			
		||||
  stage: deploy
 | 
			
		||||
  before_script:
 | 
			
		||||
    - apt-get update
 | 
			
		||||
    - apt-get --yes --force-yes install rsync
 | 
			
		||||
  script:
 | 
			
		||||
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
 | 
			
		||||
    - eval $(ssh-agent -s)
 | 
			
		||||
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
 | 
			
		||||
    - mkdir -p ~/.ssh
 | 
			
		||||
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
 | 
			
		||||
    - echo "Deploying to server"
 | 
			
		||||
    - ssh backend@wmi-backend-gc.plannaplan.pl -t "sudo systemctl stop plannaplan-backend"
 | 
			
		||||
    - ssh backend@wmi-backend-gc.plannaplan.pl -t "rm -rf /opt/plannaplan-backend/backend.jar"
 | 
			
		||||
    - rsync --progress restservice/target/*.jar backend@wmi-backend-gc.plannaplan.pl:/opt/plannaplan-backend/backend.jar
 | 
			
		||||
    - sleep 5
 | 
			
		||||
    - ssh backend@wmi-backend-gc.plannaplan.pl -t "sudo systemctl start plannaplan-backend"
 | 
			
		||||
    - echo "Deployed"
 | 
			
		||||
  only:
 | 
			
		||||
    - master
 | 
			
		||||
							
								
								
									
										20
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								README.md
									
									
									
									
									
								
							@@ -35,21 +35,23 @@ spring.profiles.active=prod
 | 
			
		||||
Jeżeli chcemy zmienić jakieś opcję dla pordukcji to robimy to w tym sammym katalogi w pliku `application-prod.properties` i dla dev analogicznie w `application-dev.properties`.
 | 
			
		||||
W paczce dla proda w protpertiesach poufne dane odczytywane są ze zmiennych środowiskowych systemu na którym odpalana jest aplikacja. Ustawić trzeba następujące zmienne:
 | 
			
		||||
 | 
			
		||||
-   PLANNAPLAN_MYSQL_DB_HOST - host bazy danych np `localhost`
 | 
			
		||||
-   PLANNAPLAN_MYSQL_DB_PORT - port na którym działa baza
 | 
			
		||||
-   PLANNAPLAN_MYSQL_DB - nazwa bazy dancyh. W profilu **dev** jest to np test
 | 
			
		||||
-   PLANNAPLAN_MYSQL_DB_USERNAME - nazwa użytkownika bazy
 | 
			
		||||
-   PLANNAPLAN_MYSQL_DB_PASSWORD - hasło użytkownika bazy
 | 
			
		||||
-   `PLANNAPLAN_MYSQL_DB_HOST` - host bazy danych np `localhost`
 | 
			
		||||
-   `PLANNAPLAN_MYSQL_DB_PORT` - port na którym działa baza
 | 
			
		||||
-   `PLANNAPLAN_MYSQL_DB` - nazwa bazy dancyh. W profilu **dev** jest to np test
 | 
			
		||||
-   `PLANNAPLAN_MYSQL_DB_USERNAME` - nazwa użytkownika bazy
 | 
			
		||||
-   `PLANNAPLAN_MYSQL_DB_PASSWORD` - hasło użytkownika bazy
 | 
			
		||||
-   `PLANNAPLAN_EMAIL_HOST` - host naszego dostawcy maila z którego będziemy wssyłać wiadomości
 | 
			
		||||
-   `PLANNAPLAN_EMAIL_PORT` - port naszego dostawcy maila
 | 
			
		||||
-   `PLANNAPLAN_EMAIL_USERNAME` - login naszego maila
 | 
			
		||||
-   `PLANNAPLAN_EMAIL_PASSWORD` - hasło naszego maila
 | 
			
		||||
-   `PLANNAPLAN_EMAIL` - nasz adres maila
 | 
			
		||||
 | 
			
		||||
## Packaging
 | 
			
		||||
 | 
			
		||||
Zeby spakowac apke do `jara` wystarcza dwie komendy zaczynajac z glownego katalogu projektu
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
mvn clean
 | 
			
		||||
mvn install
 | 
			
		||||
cd restservice
 | 
			
		||||
mvn clean package spring-boot:repackage
 | 
			
		||||
mvn clean; mvn install; cd restservice; mvn clean package spring-boot:repackage
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Utworzony zostanie jar w `restservice/target/restservice-1.0-SNAPSHOT.jar`. Oczywiscie zeby jar zadzialal kontenery dockerowe musza byc odpalone (lub baza danych na serwerze jesli zmienialismy propertisy z localhost)
 | 
			
		||||
 
 | 
			
		||||
@@ -68,6 +68,12 @@
 | 
			
		||||
      <version>3.17</version>
 | 
			
		||||
    </dependency>
 | 
			
		||||
 | 
			
		||||
    <dependency>
 | 
			
		||||
      <groupId>org.springframework.boot</groupId>
 | 
			
		||||
      <artifactId>spring-boot-starter-mail</artifactId>
 | 
			
		||||
      <version>2.2.5.RELEASE</version>
 | 
			
		||||
    </dependency>
 | 
			
		||||
 | 
			
		||||
  </dependencies>
 | 
			
		||||
 | 
			
		||||
  <build>
 | 
			
		||||
@@ -85,14 +91,14 @@
 | 
			
		||||
          <version>3.0.2</version>
 | 
			
		||||
        </plugin>
 | 
			
		||||
        <plugin>
 | 
			
		||||
        <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
        <artifactId>maven-javadoc-plugin</artifactId>
 | 
			
		||||
        <version>3.0.0</version>
 | 
			
		||||
        <configuration>
 | 
			
		||||
          <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
          <artifactId>maven-javadoc-plugin</artifactId>
 | 
			
		||||
          <version>3.0.0</version>
 | 
			
		||||
          <configuration>
 | 
			
		||||
            <source>1.8</source>
 | 
			
		||||
            <target>1.8</target>
 | 
			
		||||
        </configuration>
 | 
			
		||||
	    </plugin>
 | 
			
		||||
          </configuration>
 | 
			
		||||
        </plugin>
 | 
			
		||||
        <plugin>
 | 
			
		||||
          <artifactId>maven-compiler-plugin</artifactId>
 | 
			
		||||
          <version>3.8.0</version>
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "properties": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "plannaplan.email",
 | 
			
		||||
            "type": "java.lang.String",
 | 
			
		||||
            "description": "Email from which app sends message"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										118
									
								
								buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										118
									
								
								buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,118 @@
 | 
			
		||||
package com.plannaplan.entities;
 | 
			
		||||
 | 
			
		||||
import java.sql.Date;
 | 
			
		||||
import java.sql.Timestamp;
 | 
			
		||||
 | 
			
		||||
import javax.persistence.Entity;
 | 
			
		||||
import javax.persistence.GeneratedValue;
 | 
			
		||||
import javax.persistence.GenerationType;
 | 
			
		||||
import javax.persistence.Id;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.models.TourData;
 | 
			
		||||
import com.plannaplan.types.AppState;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * entity that keeps app configurations
 | 
			
		||||
 */
 | 
			
		||||
@Entity
 | 
			
		||||
public class AppConfig {
 | 
			
		||||
 | 
			
		||||
    @Id
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
    private Long id;
 | 
			
		||||
    private Date firstTourStart;
 | 
			
		||||
    private Date firstTourEnd;
 | 
			
		||||
    private Date secondTourStart;
 | 
			
		||||
    private Date secondTourEnd;
 | 
			
		||||
    private Timestamp configDate;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * no parameter construcotor
 | 
			
		||||
     */
 | 
			
		||||
    public AppConfig() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * constructor
 | 
			
		||||
     * 
 | 
			
		||||
     * @param firstTour first TourData instacne
 | 
			
		||||
     * @param scondTour second TourData instacne
 | 
			
		||||
     */
 | 
			
		||||
    public AppConfig(TourData firstTour, TourData scondTour) {
 | 
			
		||||
        this.firstTourStart = firstTour.getStart();
 | 
			
		||||
        this.firstTourEnd = firstTour.getEnd();
 | 
			
		||||
        this.secondTourStart = scondTour.getStart();
 | 
			
		||||
        this.secondTourEnd = scondTour.getEnd();
 | 
			
		||||
        this.configDate = new Timestamp(System.currentTimeMillis());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 
 | 
			
		||||
     * second tour end getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return Date inforamtion when second tour ends
 | 
			
		||||
     */
 | 
			
		||||
    public Date getSecondTourEnd() {
 | 
			
		||||
        return secondTourEnd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * first second start getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return Date inforamtion when second tour start
 | 
			
		||||
     */
 | 
			
		||||
    public Date getSecondTourStart() {
 | 
			
		||||
        return secondTourStart;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * first tour end getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return Date inforamtion when first tour end
 | 
			
		||||
     */
 | 
			
		||||
    public Date getFirstTourEnd() {
 | 
			
		||||
        return firstTourEnd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * first tour start getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return Date inforamtion when first tour start
 | 
			
		||||
     */
 | 
			
		||||
    public Date getFirstTourStart() {
 | 
			
		||||
        return firstTourStart;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * config date getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return Timestamp when configuration took place
 | 
			
		||||
     */
 | 
			
		||||
    public Timestamp getConfigDate() {
 | 
			
		||||
        return configDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * current state getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return AppState of app at the moment of calling method
 | 
			
		||||
     */
 | 
			
		||||
    public AppState getCurrentState() {
 | 
			
		||||
        final Date now = new Date(System.currentTimeMillis());
 | 
			
		||||
        if (this.secondTourEnd.before(now)) {
 | 
			
		||||
            return AppState.NO_TOUR;
 | 
			
		||||
        }
 | 
			
		||||
        if (this.secondTourStart.before(now)) {
 | 
			
		||||
            return AppState.SECOND_TOUR;
 | 
			
		||||
        }
 | 
			
		||||
        if (this.firstTourEnd.before(now)) {
 | 
			
		||||
            return AppState.NO_TOUR;
 | 
			
		||||
        }
 | 
			
		||||
        if (this.firstTourStart.before(now)) {
 | 
			
		||||
            return AppState.FIRST_TOUR;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return AppState.NO_TOUR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -13,7 +13,7 @@ import javax.persistence.OneToMany;
 | 
			
		||||
import javax.persistence.OneToOne;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  Entity of Commision grouping of state associated about commison and owner_id
 | 
			
		||||
 * Entity of Commision grouping of state associated about commison and owner_id
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
@@ -24,6 +24,9 @@ public class Commision {
 | 
			
		||||
    @OneToOne
 | 
			
		||||
    @JoinColumn(name = "owner_id")
 | 
			
		||||
    private User commisionOwner;
 | 
			
		||||
    @OneToOne
 | 
			
		||||
    @JoinColumn(name = "commiter_id")
 | 
			
		||||
    private User commisionCommiter;
 | 
			
		||||
    private Timestamp commisionDate;
 | 
			
		||||
 | 
			
		||||
    @OneToMany(mappedBy = "commision", fetch = FetchType.EAGER)
 | 
			
		||||
@@ -37,37 +40,62 @@ public class Commision {
 | 
			
		||||
    public Commision(User user) {
 | 
			
		||||
        this.commisionDate = new Timestamp(System.currentTimeMillis());
 | 
			
		||||
        this.commisionOwner = user;
 | 
			
		||||
        this.commisionCommiter = user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 
 | 
			
		||||
     * @param user     user whose shedule is being commited
 | 
			
		||||
     * @param commiter user that commited new schedule
 | 
			
		||||
     */
 | 
			
		||||
    public Commision(User user, User commiter) {
 | 
			
		||||
        this(user);
 | 
			
		||||
        this.commisionCommiter = commiter;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Commision() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  Id getter 
 | 
			
		||||
     *  @return id id of commision
 | 
			
		||||
     * Id getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return id id of commision
 | 
			
		||||
     */
 | 
			
		||||
    public Long getId() {
 | 
			
		||||
        return this.id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  CommisionDate getter
 | 
			
		||||
     *  @return commisionDate 
 | 
			
		||||
     * CommisionDate getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return commisionDate
 | 
			
		||||
     */
 | 
			
		||||
    public Timestamp getCommisionDate() {
 | 
			
		||||
        return commisionDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  User of given commision getter
 | 
			
		||||
     *  @return User commisionOwner
 | 
			
		||||
     * User of given commision getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return User commisionOwner
 | 
			
		||||
     */
 | 
			
		||||
    public User getCommisionOwner() {
 | 
			
		||||
        return commisionOwner;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return User entity that created commision (can be owner or deanery user)
 | 
			
		||||
     */
 | 
			
		||||
    public User getCommisionCommiter() {
 | 
			
		||||
        if (commisionCommiter == null) {
 | 
			
		||||
            return commisionOwner;
 | 
			
		||||
        }
 | 
			
		||||
        return commisionCommiter;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Assigments getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return List of assignments
 | 
			
		||||
     */
 | 
			
		||||
    public List<Assignment> getAssignments() {
 | 
			
		||||
 
 | 
			
		||||
@@ -11,11 +11,14 @@ import com.plannaplan.types.GroupType;
 | 
			
		||||
import com.plannaplan.types.WeekDay;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  Entity of Groups grouping of state ssociated about course,time,room,capacity,type,day
 | 
			
		||||
 * Entity of Groups grouping of state ssociated about
 | 
			
		||||
 * course,time,room,capacity,type,day
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
public class Groups {
 | 
			
		||||
    private static final int DEFAULT_CLASS_TIME = 90;
 | 
			
		||||
 | 
			
		||||
    @Id
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
    private Long id;
 | 
			
		||||
@@ -23,6 +26,7 @@ public class Groups {
 | 
			
		||||
    @JoinColumn(name = "course_id")
 | 
			
		||||
    private Course course;
 | 
			
		||||
    private int time;
 | 
			
		||||
    private int endTime;
 | 
			
		||||
    private String room;
 | 
			
		||||
    private int capacity;
 | 
			
		||||
    private GroupType type;
 | 
			
		||||
@@ -38,24 +42,50 @@ public class Groups {
 | 
			
		||||
     * Groups
 | 
			
		||||
     * 
 | 
			
		||||
     * @param capacity capacity given to the groups
 | 
			
		||||
     * @param room room given to the groups
 | 
			
		||||
     * @param course course given to the groups
 | 
			
		||||
     * @param time time given to the groups
 | 
			
		||||
     * @param day day given to the groups
 | 
			
		||||
     * @param room     room given to the groups
 | 
			
		||||
     * @param course   course given to the groups
 | 
			
		||||
     * @param time     time given to the groups
 | 
			
		||||
     * @param endTime  end time of class in minutes
 | 
			
		||||
     * @param day      day given to the groups
 | 
			
		||||
     * @param lecturer lecturer given to the groups
 | 
			
		||||
     */
 | 
			
		||||
    public Groups(int capacity, String room, Course course, int time, WeekDay day, Lecturer lecturer) {
 | 
			
		||||
    public Groups(int capacity, String room, Course course, int time, int endTime, WeekDay day, Lecturer lecturer) {
 | 
			
		||||
        this.capacity = capacity;
 | 
			
		||||
        this.room = room;
 | 
			
		||||
        this.course = course;
 | 
			
		||||
        this.time = time;
 | 
			
		||||
        this.endTime = endTime;
 | 
			
		||||
        this.day = day;
 | 
			
		||||
        this.lecturer = lecturer;
 | 
			
		||||
        this.type = capacity >= 50 ? GroupType.LECTURE : GroupType.CLASS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create groups with default class duration
 | 
			
		||||
     * 
 | 
			
		||||
     * @param capacity capacity given to the groups
 | 
			
		||||
     * @param room     room given to the groups
 | 
			
		||||
     * @param course   course given to the groups
 | 
			
		||||
     * @param time     time given to the groups
 | 
			
		||||
     * @param day      day given to the groups
 | 
			
		||||
     * @param lecturer lecturer given to the groups
 | 
			
		||||
     */
 | 
			
		||||
    public Groups(int capacity, String room, Course course, int time, WeekDay day, Lecturer lecturer) {
 | 
			
		||||
        this(capacity, room, course, time, time + DEFAULT_CLASS_TIME, day, lecturer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * get time of class end
 | 
			
		||||
     * 
 | 
			
		||||
     * @return hour of class finish time in minutes
 | 
			
		||||
     */
 | 
			
		||||
    public int getEndTime() {
 | 
			
		||||
        return endTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * getId
 | 
			
		||||
     * 
 | 
			
		||||
     * @return id
 | 
			
		||||
     */
 | 
			
		||||
    public Long getId() {
 | 
			
		||||
@@ -64,6 +94,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * getLecturer
 | 
			
		||||
     * 
 | 
			
		||||
     * @return lecturer
 | 
			
		||||
     */
 | 
			
		||||
    public Lecturer getLecturer() {
 | 
			
		||||
@@ -72,6 +103,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * setLecturer
 | 
			
		||||
     * 
 | 
			
		||||
     * @param lecturer set lecturer into groups
 | 
			
		||||
     */
 | 
			
		||||
    public void setLecturer(Lecturer lecturer) {
 | 
			
		||||
@@ -80,6 +112,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * WeekDay
 | 
			
		||||
     * 
 | 
			
		||||
     * @return day
 | 
			
		||||
     */
 | 
			
		||||
    public WeekDay getDay() {
 | 
			
		||||
@@ -88,6 +121,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * setLecturer
 | 
			
		||||
     * 
 | 
			
		||||
     * @param day set day into groups
 | 
			
		||||
     */
 | 
			
		||||
    public void setDay(WeekDay day) {
 | 
			
		||||
@@ -96,6 +130,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * GroupType
 | 
			
		||||
     * 
 | 
			
		||||
     * @return type
 | 
			
		||||
     */
 | 
			
		||||
    public GroupType getType() {
 | 
			
		||||
@@ -104,6 +139,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * setType
 | 
			
		||||
     * 
 | 
			
		||||
     * @param type set type into groups
 | 
			
		||||
     */
 | 
			
		||||
    public void setType(GroupType type) {
 | 
			
		||||
@@ -112,6 +148,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * getCapacity
 | 
			
		||||
     * 
 | 
			
		||||
     * @return capacity
 | 
			
		||||
     */
 | 
			
		||||
    public int getCapacity() {
 | 
			
		||||
@@ -120,6 +157,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * setCapacity
 | 
			
		||||
     * 
 | 
			
		||||
     * @param capacity set capacity into groups
 | 
			
		||||
     */
 | 
			
		||||
    public void setCapacity(int capacity) {
 | 
			
		||||
@@ -128,6 +166,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * getRoom
 | 
			
		||||
     * 
 | 
			
		||||
     * @return room
 | 
			
		||||
     */
 | 
			
		||||
    public String getRoom() {
 | 
			
		||||
@@ -136,6 +175,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * setRoom
 | 
			
		||||
     * 
 | 
			
		||||
     * @param room set room into groups
 | 
			
		||||
     */
 | 
			
		||||
    public void setRoom(String room) {
 | 
			
		||||
@@ -144,6 +184,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * getTime
 | 
			
		||||
     * 
 | 
			
		||||
     * @return time
 | 
			
		||||
     */
 | 
			
		||||
    public int getTime() {
 | 
			
		||||
@@ -152,6 +193,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * setTime
 | 
			
		||||
     * 
 | 
			
		||||
     * @param time set time into groups
 | 
			
		||||
     */
 | 
			
		||||
    public void setTime(int time) {
 | 
			
		||||
@@ -160,6 +202,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * getCourseId
 | 
			
		||||
     * 
 | 
			
		||||
     * @return course
 | 
			
		||||
     */
 | 
			
		||||
    public Course getCourseId() {
 | 
			
		||||
@@ -168,6 +211,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * setCourseId
 | 
			
		||||
     * 
 | 
			
		||||
     * @param courseId set courseId into groups
 | 
			
		||||
     */
 | 
			
		||||
    public void setCourseId(Course courseId) {
 | 
			
		||||
@@ -176,6 +220,7 @@ public class Groups {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * getTimeString
 | 
			
		||||
     * 
 | 
			
		||||
     * @return time as formated String
 | 
			
		||||
     */
 | 
			
		||||
    public String getTimeString() {
 | 
			
		||||
@@ -187,4 +232,19 @@ public class Groups {
 | 
			
		||||
        }
 | 
			
		||||
        return String.format("%s.%s", hoursString, minutesString);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * gets end time formated strins
 | 
			
		||||
     * 
 | 
			
		||||
     * @return end time as formated String
 | 
			
		||||
     */
 | 
			
		||||
    public String getEndTimeString() {
 | 
			
		||||
        int minutes = this.getEndTime() % 60;
 | 
			
		||||
        String hoursString = Integer.toString(this.getEndTime() / 60);
 | 
			
		||||
        String minutesString = Integer.toString(minutes);
 | 
			
		||||
        if (minutes < 10) {
 | 
			
		||||
            minutesString = "0" + minutesString;
 | 
			
		||||
        }
 | 
			
		||||
        return String.format("%s.%s", hoursString, minutesString);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package com.plannaplan.entities;
 | 
			
		||||
 | 
			
		||||
import java.sql.Timestamp;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
 | 
			
		||||
import javax.persistence.Entity;
 | 
			
		||||
@@ -11,7 +12,8 @@ import javax.persistence.Id;
 | 
			
		||||
import com.plannaplan.types.UserRoles;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  Entity of User grouping of state ssociated about id,name,surname,email,role,token,tokenCreatedDate
 | 
			
		||||
 * Entity of User grouping of state ssociated about
 | 
			
		||||
 * id,name,surname,email,role,token,tokenCreatedDate
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
@@ -27,19 +29,18 @@ public class User {
 | 
			
		||||
    private String usosId;
 | 
			
		||||
    private UserRoles role;
 | 
			
		||||
    private String token;
 | 
			
		||||
    private String refreshToken;
 | 
			
		||||
    private Timestamp tokenUsageDate;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    public User() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * User
 | 
			
		||||
     *
 | 
			
		||||
     * @param name name given to the user
 | 
			
		||||
    /**
 | 
			
		||||
     * 
 | 
			
		||||
     * @param name    name given to the user
 | 
			
		||||
     * @param surname surname given to the user
 | 
			
		||||
     * @param email mail given to the user
 | 
			
		||||
     * @param role role given to the user
 | 
			
		||||
     * @param mail    mail given to the user
 | 
			
		||||
     * @param role
 | 
			
		||||
     */
 | 
			
		||||
    public User(String name, String surname, String mail, UserRoles role) {
 | 
			
		||||
        this.name = name;
 | 
			
		||||
@@ -48,136 +49,152 @@ public class User {
 | 
			
		||||
        this.role = role;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * User
 | 
			
		||||
     *
 | 
			
		||||
     * @param name name given to the user
 | 
			
		||||
    /**
 | 
			
		||||
     * 
 | 
			
		||||
     * @param name    name given to the user
 | 
			
		||||
     * @param surname surname given to the user
 | 
			
		||||
     * @param email mail given to the user
 | 
			
		||||
     * @param usosId id in the USOS system
 | 
			
		||||
     * @param role role given to the user
 | 
			
		||||
     * @param mail    mail given to the user
 | 
			
		||||
     * @param usosId  id in the USOS system
 | 
			
		||||
     * @param role
 | 
			
		||||
     */
 | 
			
		||||
    public User(String name, String surname, String mail, String usosId, UserRoles role){
 | 
			
		||||
        this(name,surname,mail,role);
 | 
			
		||||
        this.usosId = usosId;     
 | 
			
		||||
    public User(String name, String surname, String mail, String usosId, UserRoles role) {
 | 
			
		||||
        this(name, surname, mail, role);
 | 
			
		||||
        this.usosId = usosId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getusosId
 | 
			
		||||
     *
 | 
			
		||||
     * @return usosId
 | 
			
		||||
    /**
 | 
			
		||||
     * usos id getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return usosid
 | 
			
		||||
     */
 | 
			
		||||
    public String getUsosId() {
 | 
			
		||||
        return usosId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getEmail
 | 
			
		||||
     *
 | 
			
		||||
     * @return email
 | 
			
		||||
    /**
 | 
			
		||||
     * email getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return mailof user
 | 
			
		||||
     */
 | 
			
		||||
    public String getEmail() {
 | 
			
		||||
        return email;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * setEmail
 | 
			
		||||
     *
 | 
			
		||||
     * @param email set email to the user
 | 
			
		||||
    /**
 | 
			
		||||
     * email setter
 | 
			
		||||
     * 
 | 
			
		||||
     * @param email user email
 | 
			
		||||
     */
 | 
			
		||||
    public void setEmail(String email) {
 | 
			
		||||
        this.email = email;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getTokenUsageDate
 | 
			
		||||
     *
 | 
			
		||||
     * @return tokenUsageDate
 | 
			
		||||
    /**
 | 
			
		||||
     * token usage getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return Timestamp when token was used
 | 
			
		||||
     */
 | 
			
		||||
    public Timestamp getTokenUsageDate() {
 | 
			
		||||
        return tokenUsageDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getToken
 | 
			
		||||
     *
 | 
			
		||||
     * @return token
 | 
			
		||||
    /**
 | 
			
		||||
     * token getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return user token
 | 
			
		||||
     */
 | 
			
		||||
    public String getToken() {
 | 
			
		||||
        return token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * setToken
 | 
			
		||||
     *
 | 
			
		||||
     * @param token set token to the entity
 | 
			
		||||
    /**
 | 
			
		||||
     * @return token needed to call refresh token after it expired
 | 
			
		||||
     */
 | 
			
		||||
    public String getRefreshToken() {
 | 
			
		||||
        return refreshToken;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * token seter. Sets token and automaticly set time when was set
 | 
			
		||||
     * 
 | 
			
		||||
     * @param token token to set
 | 
			
		||||
     */
 | 
			
		||||
    public void setToken(String token) {
 | 
			
		||||
        this.tokenUsageDate = new Timestamp(System.currentTimeMillis());
 | 
			
		||||
        this.token = token;
 | 
			
		||||
        this.refreshToken = UUID.randomUUID().toString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* getName
 | 
			
		||||
     *
 | 
			
		||||
     * @return name
 | 
			
		||||
    /**
 | 
			
		||||
     * name setter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return String user name
 | 
			
		||||
     */
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        return name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* getRole
 | 
			
		||||
     *
 | 
			
		||||
     * @return role
 | 
			
		||||
    /**
 | 
			
		||||
     * user rolse getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return UserRoles of user
 | 
			
		||||
     */
 | 
			
		||||
    public UserRoles getRole() {
 | 
			
		||||
        return role;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* setRole
 | 
			
		||||
     *
 | 
			
		||||
     * @param role set role to the entity
 | 
			
		||||
    /**
 | 
			
		||||
     * user role setter
 | 
			
		||||
     * 
 | 
			
		||||
     * @param role to be set
 | 
			
		||||
     */
 | 
			
		||||
    public void setRole(UserRoles role) {
 | 
			
		||||
        this.role = role;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getSurname
 | 
			
		||||
     * @return surname
 | 
			
		||||
    /**
 | 
			
		||||
     * surname getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return string surname
 | 
			
		||||
     */
 | 
			
		||||
    public String getSurname() {
 | 
			
		||||
        return surname;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * setSurname
 | 
			
		||||
     * @param surname set surname into entity user
 | 
			
		||||
    /**
 | 
			
		||||
     * surname setter
 | 
			
		||||
     * 
 | 
			
		||||
     * @param surname string to be set as surnames
 | 
			
		||||
     */
 | 
			
		||||
    public void setSurname(String surname) {
 | 
			
		||||
        this.surname = surname;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * setName
 | 
			
		||||
     * @param name set name into entity user
 | 
			
		||||
    /**
 | 
			
		||||
     * name stter
 | 
			
		||||
     * 
 | 
			
		||||
     * @param name stirng to be set as name
 | 
			
		||||
     */
 | 
			
		||||
    public void setName(String name) {
 | 
			
		||||
        this.name = name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getId
 | 
			
		||||
     * @return id
 | 
			
		||||
    /**
 | 
			
		||||
     * id getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return id in database
 | 
			
		||||
     */
 | 
			
		||||
    public Long getId() {
 | 
			
		||||
        return this.id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * isCredentialsNonExpired
 | 
			
		||||
     * Returns TRUE if is Credentials Non Expired in the otherwise it returns false
 | 
			
		||||
    /**
 | 
			
		||||
     * it checks if given ammount of time passed since last token usage. If not
 | 
			
		||||
     * retunr true and reset time otherwise return false and token won work anymore
 | 
			
		||||
     * 
 | 
			
		||||
     * @return boolena if credentials (token) is expired or not
 | 
			
		||||
     */
 | 
			
		||||
     public boolean isCredentialsNonExpired() {
 | 
			
		||||
    public boolean isCredentialsNonExpired() {
 | 
			
		||||
        final long diffInMilliseconds = Math
 | 
			
		||||
                .abs(this.tokenUsageDate.getTime() - new Timestamp(System.currentTimeMillis()).getTime());
 | 
			
		||||
        final long minutes = TimeUnit.MILLISECONDS.toMinutes(diffInMilliseconds);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,51 +1,50 @@
 | 
			
		||||
package com.plannaplan.models;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
 | 
			
		||||
public class ConfigData {
 | 
			
		||||
    private Date start;
 | 
			
		||||
    private Date end;
 | 
			
		||||
    private TourData firstTour;
 | 
			
		||||
    private TourData secondTour;
 | 
			
		||||
    private InputStream filestream;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * ConfigData
 | 
			
		||||
     *
 | 
			
		||||
     * @param start when the configdata begins
 | 
			
		||||
     * @param end when the configdata ends
 | 
			
		||||
     * @param filestream where the filestream is
 | 
			
		||||
    /**
 | 
			
		||||
     * constructor
 | 
			
		||||
     * 
 | 
			
		||||
     * @param firstTour  date of first tours
 | 
			
		||||
     * @param secondTour date of second tours
 | 
			
		||||
     * @param filestream filestram with data to import
 | 
			
		||||
     */
 | 
			
		||||
    public ConfigData(Date start, Date end, InputStream filestream) {
 | 
			
		||||
        this.start = start;
 | 
			
		||||
        this.end = end;
 | 
			
		||||
    public ConfigData(TourData firstTour, TourData secondTour, InputStream filestream) {
 | 
			
		||||
        this.firstTour = firstTour;
 | 
			
		||||
        this.secondTour = secondTour;
 | 
			
		||||
        this.filestream = filestream;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getFilestream
 | 
			
		||||
     *
 | 
			
		||||
     * @return filestream
 | 
			
		||||
    /**
 | 
			
		||||
     * second tour getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return TourData second tour
 | 
			
		||||
     */
 | 
			
		||||
    public TourData getSecondTour() {
 | 
			
		||||
        return secondTour;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * first tour getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return TourData first tour
 | 
			
		||||
     */
 | 
			
		||||
    public TourData getFirstTour() {
 | 
			
		||||
        return firstTour;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * filestream getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return InputStream with data to import
 | 
			
		||||
     */
 | 
			
		||||
    public InputStream getFilestream() {
 | 
			
		||||
        return filestream;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getEnd
 | 
			
		||||
     *
 | 
			
		||||
     * @return end
 | 
			
		||||
     */
 | 
			
		||||
    public Date getEnd() {
 | 
			
		||||
        return end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * getStart
 | 
			
		||||
     *
 | 
			
		||||
     * @return start
 | 
			
		||||
     */
 | 
			
		||||
    public Date getStart() {
 | 
			
		||||
        return start;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								buisnesslogic/src/main/java/com/plannaplan/models/TourData.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										49
									
								
								buisnesslogic/src/main/java/com/plannaplan/models/TourData.java
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
package com.plannaplan.models;
 | 
			
		||||
 | 
			
		||||
import java.sql.Date;
 | 
			
		||||
 | 
			
		||||
public class TourData {
 | 
			
		||||
 | 
			
		||||
    private Date start;
 | 
			
		||||
    private Date end;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * construcotr for java.sql.Date
 | 
			
		||||
     * 
 | 
			
		||||
     * @param start Date when tour start
 | 
			
		||||
     * @param end   Date when tour end
 | 
			
		||||
     */
 | 
			
		||||
    public TourData(Date start, Date end) {
 | 
			
		||||
        this.start = start;
 | 
			
		||||
        this.end = end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * constructor construcotr for java.util.Date
 | 
			
		||||
     * 
 | 
			
		||||
     * @param start Date when tour start
 | 
			
		||||
     * @param end   Date when tour end
 | 
			
		||||
     */
 | 
			
		||||
    public TourData(java.util.Date start, java.util.Date end) {
 | 
			
		||||
        this.start = new Date(start.getTime());
 | 
			
		||||
        this.end = new Date(end.getTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * tour end getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return Date end of tour
 | 
			
		||||
     */
 | 
			
		||||
    public Date getEnd() {
 | 
			
		||||
        return end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * tour start getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return Date beginning of tour
 | 
			
		||||
     */
 | 
			
		||||
    public Date getStart() {
 | 
			
		||||
        return start;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
package com.plannaplan.repositories;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.AppConfig;
 | 
			
		||||
 | 
			
		||||
import org.springframework.data.jpa.repository.JpaRepository;
 | 
			
		||||
 | 
			
		||||
public interface AppConfigRepository extends JpaRepository<AppConfig, Long> {
 | 
			
		||||
}
 | 
			
		||||
@@ -12,29 +12,25 @@ import org.springframework.data.repository.query.Param;
 | 
			
		||||
import org.springframework.stereotype.Repository;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  UserRepository.getByAuthority:
 | 
			
		||||
 *      Return list of:
 | 
			
		||||
 *      SELECT * FROM User WHERE email = i.
 | 
			
		||||
 * UserRepository.getByAuthority: Return list of: SELECT * FROM User WHERE email
 | 
			
		||||
 * = i.
 | 
			
		||||
 * 
 | 
			
		||||
 *      Where i, ?1 are equale to variables. 
 | 
			
		||||
 * Where i, ?1 are equale to variables.
 | 
			
		||||
 * 
 | 
			
		||||
 *  UserRepository.getByToken:
 | 
			
		||||
 *      Return list of:
 | 
			
		||||
 *      SELECT * FROM User WHERE token = i.
 | 
			
		||||
 * UserRepository.getByToken: Return list of: SELECT * FROM User WHERE token =
 | 
			
		||||
 * i.
 | 
			
		||||
 * 
 | 
			
		||||
 *      Where i, ?1 are equale to variables.  
 | 
			
		||||
 * Where i, ?1 are equale to variables.
 | 
			
		||||
 * 
 | 
			
		||||
 *  UserRepository.searchForUsers:
 | 
			
		||||
 *      Return list of:
 | 
			
		||||
 *      SELECT * FROM User WHERE (name LIKE %?1% OR surname LIKE %?1%).
 | 
			
		||||
 * UserRepository.searchForUsers: Return list of: SELECT * FROM User WHERE (name
 | 
			
		||||
 * LIKE %?1% OR surname LIKE %?1%).
 | 
			
		||||
 * 
 | 
			
		||||
 *      Where i, ?1 are equale to variables.   
 | 
			
		||||
 * Where i, ?1 are equale to variables.
 | 
			
		||||
 * 
 | 
			
		||||
 *  UserRepository.searchForUsers with role:
 | 
			
		||||
 *      Return list of:
 | 
			
		||||
 *      SELECT * FROM User WHERE (name LIKE %?1% OR surname LIKE %?1%) AND role=?2").
 | 
			
		||||
 * UserRepository.searchForUsers with role: Return list of: SELECT * FROM User
 | 
			
		||||
 * WHERE (name LIKE %?1% OR surname LIKE %?1%) AND role=?2").
 | 
			
		||||
 * 
 | 
			
		||||
 *      Where i, ?1 are equale to variables.
 | 
			
		||||
 * Where i, ?1 are equale to variables.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@Repository
 | 
			
		||||
@@ -42,6 +38,9 @@ public interface UserRepository extends JpaRepository<User, Long> {
 | 
			
		||||
    @Query("FROM User WHERE email = ?1")
 | 
			
		||||
    Optional<User> getByAuthority(@Param("authority") String authority);
 | 
			
		||||
 | 
			
		||||
    @Query("FROM User WHERE refreshToken = ?1")
 | 
			
		||||
    Optional<User> getByRefreshToken(@Param("refreshToken") String refreshToken);
 | 
			
		||||
 | 
			
		||||
    @Query("FROM User WHERE token = ?1")
 | 
			
		||||
    Optional<User> getByToken(@Param("token") String token);
 | 
			
		||||
 | 
			
		||||
@@ -51,6 +50,9 @@ public interface UserRepository extends JpaRepository<User, Long> {
 | 
			
		||||
    @Query("FROM User WHERE (name LIKE %?1% OR surname LIKE %?1%) AND role=?2")
 | 
			
		||||
    List<User> searchForUsers(@Param("query") String query, @Param("role") UserRoles role);
 | 
			
		||||
 | 
			
		||||
    @Query("FROM User WHERE role=?1")
 | 
			
		||||
    List<User> getAllByRole(@Param("role") UserRoles role);
 | 
			
		||||
 | 
			
		||||
    @Query("FROM User WHERE usosId = ?1")
 | 
			
		||||
    Optional<User> getByUsosId(@Param("usosId") String usosId);
 | 
			
		||||
}
 | 
			
		||||
@@ -2,28 +2,64 @@ package com.plannaplan.services;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.models.ConfigData;
 | 
			
		||||
import com.plannaplan.models.FileData;
 | 
			
		||||
import com.plannaplan.repositories.AppConfigRepository;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import java.util.Comparator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.configutils.*;
 | 
			
		||||
import com.plannaplan.entities.AppConfig;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  FileReader is used for reading xls file from input stream.
 | 
			
		||||
 * FileReader is used for reading xls file from input stream.
 | 
			
		||||
 */
 | 
			
		||||
@Component
 | 
			
		||||
public class ConfiguratorService {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private FileToDatabaseMigrator migrator;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private AppConfigRepository configRepo;
 | 
			
		||||
 | 
			
		||||
    public ConfiguratorService() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * methoid to config system
 | 
			
		||||
     * 
 | 
			
		||||
     * @param data ConfigData containng system configs
 | 
			
		||||
     */
 | 
			
		||||
    public void config(ConfigData data) {
 | 
			
		||||
        FileReader reader = new FileReader(data.getFilestream());
 | 
			
		||||
        FileData coursesData = reader.read();
 | 
			
		||||
        this.configRepo.save(new AppConfig(data.getFirstTour(), data.getSecondTour()));
 | 
			
		||||
        migrator.migrate(coursesData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * current config getter
 | 
			
		||||
     * 
 | 
			
		||||
     * @return AppConfig with newest config_date
 | 
			
		||||
     */
 | 
			
		||||
    public AppConfig getCurrentConfig() {
 | 
			
		||||
        final List<AppConfig> repsonse = this.configRepo.findAll().stream().sorted(new Comparator<AppConfig>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public int compare(AppConfig i1, AppConfig i2) {
 | 
			
		||||
                if (i1.getConfigDate().after(i2.getConfigDate())) {
 | 
			
		||||
                    return -1;
 | 
			
		||||
                }
 | 
			
		||||
                if (i1.getConfigDate().before(i2.getConfigDate())) {
 | 
			
		||||
                    return 1;
 | 
			
		||||
                }
 | 
			
		||||
                return 0;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }).collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
        return repsonse.get(0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								buisnesslogic/src/main/java/com/plannaplan/services/EmailService.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								buisnesslogic/src/main/java/com/plannaplan/services/EmailService.java
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
package com.plannaplan.services;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
import org.springframework.mail.SimpleMailMessage;
 | 
			
		||||
import org.springframework.mail.javamail.JavaMailSender;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Service to send emails
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
public class EmailService {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private JavaMailSender emailSender;
 | 
			
		||||
 | 
			
		||||
    @Value("${plannaplan.email}")
 | 
			
		||||
    private String appEmail;
 | 
			
		||||
 | 
			
		||||
    public EmailService() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * send simple text email
 | 
			
		||||
     * 
 | 
			
		||||
     * @param destination destitnaion mail
 | 
			
		||||
     * @param message     text to be send
 | 
			
		||||
     */
 | 
			
		||||
    public void sendMail(String destination, String message) {
 | 
			
		||||
        SimpleMailMessage mailMessage = new SimpleMailMessage();
 | 
			
		||||
        mailMessage.setFrom(appEmail);
 | 
			
		||||
        mailMessage.setTo(destination);
 | 
			
		||||
        mailMessage.setSubject("[Plan na plan] INFO");
 | 
			
		||||
        mailMessage.setText(message);
 | 
			
		||||
        emailSender.send(mailMessage);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								buisnesslogic/src/main/java/com/plannaplan/services/EventService.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								buisnesslogic/src/main/java/com/plannaplan/services/EventService.java
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
package com.plannaplan.services;
 | 
			
		||||
 | 
			
		||||
// import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.scheduling.annotation.Scheduled;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
public class EventService {
 | 
			
		||||
 | 
			
		||||
    // @Autowired
 | 
			
		||||
    // private EmailService emailService;
 | 
			
		||||
 | 
			
		||||
    @Scheduled(cron = "0 2 17 * * *")
 | 
			
		||||
    public void collectGroupLosses() {
 | 
			
		||||
        System.out.println("Checking for groups");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -77,4 +77,12 @@ public class UserService {
 | 
			
		||||
        return this.repo.findById(userId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<User> getAllStudents() {
 | 
			
		||||
        return this.repo.getAllByRole(UserRoles.STUDENT);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Optional<User> getUserByRefreshToken(String refreshToken) {
 | 
			
		||||
        return this.repo.getByRefreshToken(refreshToken);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								buisnesslogic/src/main/java/com/plannaplan/types/AppState.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								buisnesslogic/src/main/java/com/plannaplan/types/AppState.java
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
package com.plannaplan.types;
 | 
			
		||||
 | 
			
		||||
public enum AppState {
 | 
			
		||||
    FIRST_TOUR, SECOND_TOUR, NO_TOUR
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										141
									
								
								buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										141
									
								
								buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,141 @@
 | 
			
		||||
package com.plannaplan.entities;
 | 
			
		||||
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertTrue;
 | 
			
		||||
 | 
			
		||||
import java.sql.Date;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.models.TourData;
 | 
			
		||||
import com.plannaplan.types.AppState;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
public class AppConfigTest {
 | 
			
		||||
 | 
			
		||||
    private static long ONE_DAY = 86400000;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnNoTourDueToTooEarly() {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() + ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis() + 2 * ONE_DAY);
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis() + 3 * ONE_DAY);
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() + 4 * ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.NO_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnFirstTourDueToStart() throws InterruptedException {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis());
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis() + 2 * ONE_DAY);
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis() + 3 * ONE_DAY);
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() + 4 * ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        Thread.sleep(1000);
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.FIRST_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnFirstTourDueToInBetween() {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() - ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis() + 2 * ONE_DAY);
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis() + 3 * ONE_DAY);
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() + 4 * ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.FIRST_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnNoTourInLastDay() throws InterruptedException {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() - ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis());
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis() + 3 * ONE_DAY);
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() + 4 * ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        Thread.sleep(1000);
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.NO_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnNoTourInBetween() {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() - 2 * ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis() - ONE_DAY);
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis() + 3 * ONE_DAY);
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() + 4 * ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.NO_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnSecondTourInStart() throws InterruptedException {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() - 2 * ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis() - ONE_DAY);
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis());
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() + 4 * ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        Thread.sleep(1000);
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.SECOND_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnSecondTourInBetween() {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() - 3 * ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis() - 2 * ONE_DAY);
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis() - ONE_DAY);
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() + 4 * ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.SECOND_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnNoTourDueToEndSecond() throws InterruptedException {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() - 3 * ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis() - 2 * ONE_DAY);
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis() - ONE_DAY);
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        Thread.sleep(1000);
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.NO_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnNoTourAfterSecondEnd() {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() - 4 * ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis() - 3 * ONE_DAY);
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis() - 2 * ONE_DAY);
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() - ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.NO_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnSecondTourWhereThereIsABrake() throws InterruptedException {
 | 
			
		||||
        final Date firtstTourStart = new Date(System.currentTimeMillis() - 4 * ONE_DAY);
 | 
			
		||||
        final Date firtstTourEnd = new Date(System.currentTimeMillis());
 | 
			
		||||
        final Date secondTourStart = new Date(System.currentTimeMillis());
 | 
			
		||||
        final Date secondTourEnd = new Date(System.currentTimeMillis() + ONE_DAY);
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
 | 
			
		||||
                new TourData(secondTourStart, secondTourEnd));
 | 
			
		||||
        Thread.sleep(1000);
 | 
			
		||||
        assertTrue(config.getCurrentState() == AppState.SECOND_TOUR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -8,9 +8,13 @@ import org.springframework.test.context.junit4.SpringRunner;
 | 
			
		||||
import static org.junit.Assert.assertTrue;
 | 
			
		||||
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.sql.Date;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.TestApplication;
 | 
			
		||||
import com.plannaplan.entities.AppConfig;
 | 
			
		||||
import com.plannaplan.models.ConfigData;
 | 
			
		||||
import com.plannaplan.models.TourData;
 | 
			
		||||
import com.plannaplan.repositories.AppConfigRepository;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.junit.runner.RunWith;
 | 
			
		||||
@@ -32,11 +36,18 @@ public class ConfiguratorServiceTest {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private LecturerService lecturerService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private AppConfigRepository appConfigRepo;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldImportDataToDataBase() {
 | 
			
		||||
        final InputStream inputStream = getClass().getClassLoader()
 | 
			
		||||
                .getResourceAsStream(TestApplication.TEST_CONFIG_FILE);
 | 
			
		||||
        final ConfigData data = new ConfigData(null, null, inputStream);
 | 
			
		||||
        final ConfigData data = new ConfigData(
 | 
			
		||||
                new TourData(new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 86400000)),
 | 
			
		||||
                new TourData(new Date(System.currentTimeMillis() + 86400000),
 | 
			
		||||
                        new Date(System.currentTimeMillis() + 2 * 86400000)),
 | 
			
		||||
                inputStream);
 | 
			
		||||
        this.configuratorService.config(data);
 | 
			
		||||
 | 
			
		||||
        int courses_ammount = this.courseService.getCoursesAmmount();
 | 
			
		||||
@@ -46,4 +57,16 @@ public class ConfiguratorServiceTest {
 | 
			
		||||
        assertTrue(courses_ammount > 0 && groups_ammount > 0 && lecturers_ammount > 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldRetrunNewestConfig() throws InterruptedException {
 | 
			
		||||
        final Date dateToCheck = new Date(System.currentTimeMillis());
 | 
			
		||||
        this.appConfigRepo.save(new AppConfig(new TourData(null, null), new TourData(null, null)));
 | 
			
		||||
        Thread.sleep(2000);
 | 
			
		||||
        this.appConfigRepo.save(new AppConfig(new TourData(dateToCheck, null), new TourData(null, null)));
 | 
			
		||||
 | 
			
		||||
        AppConfig response = this.configuratorService.getCurrentConfig();
 | 
			
		||||
        assertTrue(response.getFirstTourStart() != null);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								buisnesslogic/src/test/java/com/plannaplan/services/EmailServiceTest.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								buisnesslogic/src/test/java/com/plannaplan/services/EmailServiceTest.java
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
package com.plannaplan.services;
 | 
			
		||||
 | 
			
		||||
import org.junit.Ignore;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.junit.runner.RunWith;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.boot.test.context.SpringBootTest;
 | 
			
		||||
import org.springframework.test.context.ContextConfiguration;
 | 
			
		||||
import org.springframework.test.context.junit4.SpringRunner;
 | 
			
		||||
 | 
			
		||||
@RunWith(SpringRunner.class)
 | 
			
		||||
@SpringBootTest
 | 
			
		||||
@ContextConfiguration
 | 
			
		||||
public class EmailServiceTest {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private EmailService service;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    @Ignore
 | 
			
		||||
    /**
 | 
			
		||||
     * This test is ignored because we don't have way to check if email has arrived.
 | 
			
		||||
     * Check mailchater to check this manually
 | 
			
		||||
     */
 | 
			
		||||
    public void shouldSendSimpleEmail() {
 | 
			
		||||
        this.service.sendMail("shouldSendSimpleEmail@EmailService.test", "This is totally simple message");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -8,5 +8,11 @@ spring.jpa.hibernate.ddl-auto=create-drop
 | 
			
		||||
spring.jackson.serialization.fail-on-empty-beans=false
 | 
			
		||||
spring.main.allow-bean-definition-overriding=true
 | 
			
		||||
spring.jackson.default-property-inclusion = NON_NULL
 | 
			
		||||
spring.mail.host=localhost
 | 
			
		||||
spring.mail.port=1025
 | 
			
		||||
spring.mail.properties.mail.smtp.auth=false
 | 
			
		||||
spring.mail.properties.mail.smtp.starttls.enable=false
 | 
			
		||||
 | 
			
		||||
plannaplan.email = plannaplan.kontakt@gmail.com
 | 
			
		||||
 | 
			
		||||
server.port=1285
 | 
			
		||||
							
								
								
									
										3
									
								
								init.sql
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								init.sql
									
									
									
									
									
								
							@@ -1 +1,2 @@
 | 
			
		||||
CREATE DATABASE IF NOT EXISTS test;
 | 
			
		||||
CREATE DATABASE IF NOT EXISTS test;
 | 
			
		||||
SET GLOBAL time_zone = '+1:00';
 | 
			
		||||
@@ -17,21 +17,21 @@
 | 
			
		||||
  <url>http://www.example.com</url>
 | 
			
		||||
 | 
			
		||||
  <profiles>
 | 
			
		||||
      <profile>
 | 
			
		||||
          <id>dev</id>
 | 
			
		||||
          <properties>
 | 
			
		||||
              <activatedProperties>dev</activatedProperties>
 | 
			
		||||
          </properties>
 | 
			
		||||
          <activation>
 | 
			
		||||
              <activeByDefault>true</activeByDefault>
 | 
			
		||||
          </activation>
 | 
			
		||||
      </profile>
 | 
			
		||||
      <profile>
 | 
			
		||||
          <id>prod</id>
 | 
			
		||||
          <properties>
 | 
			
		||||
              <activatedProperties>prod</activatedProperties>
 | 
			
		||||
          </properties>
 | 
			
		||||
      </profile>
 | 
			
		||||
    <profile>
 | 
			
		||||
      <id>dev</id>
 | 
			
		||||
      <properties>
 | 
			
		||||
        <activatedProperties>dev</activatedProperties>
 | 
			
		||||
      </properties>
 | 
			
		||||
      <activation>
 | 
			
		||||
        <activeByDefault>true</activeByDefault>
 | 
			
		||||
      </activation>
 | 
			
		||||
    </profile>
 | 
			
		||||
    <profile>
 | 
			
		||||
      <id>prod</id>
 | 
			
		||||
      <properties>
 | 
			
		||||
        <activatedProperties>prod</activatedProperties>
 | 
			
		||||
      </properties>
 | 
			
		||||
    </profile>
 | 
			
		||||
  </profiles>
 | 
			
		||||
 | 
			
		||||
  <properties>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
package com.plannaplan;
 | 
			
		||||
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.sql.Date;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.models.ConfigData;
 | 
			
		||||
import com.plannaplan.models.TourData;
 | 
			
		||||
import com.plannaplan.entities.User;
 | 
			
		||||
import com.plannaplan.services.UserService;
 | 
			
		||||
import com.plannaplan.types.UserRoles;
 | 
			
		||||
@@ -14,9 +16,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
			
		||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
 | 
			
		||||
 | 
			
		||||
import org.springframework.context.event.EventListener;
 | 
			
		||||
import org.springframework.scheduling.annotation.EnableScheduling;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.services.ConfiguratorService;
 | 
			
		||||
 | 
			
		||||
@SpringBootApplication
 | 
			
		||||
@EnableScheduling
 | 
			
		||||
public class App {
 | 
			
		||||
 | 
			
		||||
        public final static String API_VERSION = "v1";
 | 
			
		||||
@@ -38,13 +43,22 @@ public class App {
 | 
			
		||||
                SpringApplication.run(App.class, args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * method to import mocked data to testing app after startz. It is called only
 | 
			
		||||
         * in dev profile
 | 
			
		||||
         */
 | 
			
		||||
        @EventListener(ApplicationReadyEvent.class)
 | 
			
		||||
        public void importData() {
 | 
			
		||||
                System.out.println(Logo.getInitInfo(isDev));
 | 
			
		||||
 | 
			
		||||
                if (this.isDev) {
 | 
			
		||||
                        InputStream inputStream = getClass().getClassLoader().getResourceAsStream("Zajecia.xlsx");
 | 
			
		||||
                        ConfigData data = new ConfigData(null, null, inputStream);
 | 
			
		||||
                        ConfigData data = new ConfigData(
 | 
			
		||||
                                        new TourData(new Date(System.currentTimeMillis()),
 | 
			
		||||
                                                        new Date(System.currentTimeMillis() + 86400000)),
 | 
			
		||||
                                        new TourData(new Date(System.currentTimeMillis() + 86400000),
 | 
			
		||||
                                                        new Date(System.currentTimeMillis() + 2 * 86400000)),
 | 
			
		||||
                                        inputStream);
 | 
			
		||||
                        this.contrl.config(data);
 | 
			
		||||
 | 
			
		||||
                        User newuser = new User();
 | 
			
		||||
@@ -109,6 +123,11 @@ public class App {
 | 
			
		||||
                        newuser.setSurname("Sad");
 | 
			
		||||
                        newuser.setRole(UserRoles.STUDENT);
 | 
			
		||||
                        this.userService.save(newuser);
 | 
			
		||||
 | 
			
		||||
                        newuser = new User();
 | 
			
		||||
                        newuser.setEmail("iamnull@st.amu.edu.pl");
 | 
			
		||||
                        newuser.setRole(UserRoles.STUDENT);
 | 
			
		||||
                        this.userService.save(newuser);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                System.out.println(Logo.getStartedInfo(isDev));
 | 
			
		||||
 
 | 
			
		||||
@@ -24,14 +24,10 @@ public class Swagger2Config extends WebMvcConfigurationSupport {
 | 
			
		||||
 | 
			
		||||
    @Bean
 | 
			
		||||
    public Docket createRestApi() {
 | 
			
		||||
        Parameter authHeader = new ParameterBuilder()
 | 
			
		||||
        .parameterType("header")
 | 
			
		||||
        .name("Authorization")
 | 
			
		||||
        .modelRef(new ModelRef("string"))
 | 
			
		||||
        .build();
 | 
			
		||||
        Parameter authHeader = new ParameterBuilder().parameterType("header").name("Authorization")
 | 
			
		||||
                .modelRef(new ModelRef("string")).build();
 | 
			
		||||
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
 | 
			
		||||
                .apis(RequestHandlerSelectors.basePackage("com.plannaplan")).paths(PathSelectors.any())
 | 
			
		||||
                .build()
 | 
			
		||||
                .apis(RequestHandlerSelectors.basePackage("com.plannaplan")).paths(PathSelectors.any()).build()
 | 
			
		||||
                .globalOperationParameters(Collections.singletonList(authHeader));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
@CrossOrigin
 | 
			
		||||
@RequestMapping("/api/" + App.API_VERSION + "/assignments")
 | 
			
		||||
@Api(tags = {
 | 
			
		||||
        "Assignments" }, value = "Assignments", description = "Assignment is representation of student willing to join given group (lecture or calss)")
 | 
			
		||||
        "Assignments" }, value = "Assignments", description = "Assignment is representation of student willing to join given group (lecture or calss). This comtroller is depreaceted. Use commission instead")
 | 
			
		||||
@Deprecated
 | 
			
		||||
public class AssignmentsController extends TokenBasedController {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
@@ -39,7 +40,8 @@ public class AssignmentsController extends TokenBasedController {
 | 
			
		||||
    private AssignmentService assignmentService;
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/user")
 | 
			
		||||
    @ApiOperation(value = "Return user current assignemts (from newest commision). STUDENT Token needs to be provided.")
 | 
			
		||||
    @ApiOperation(value = "Return user current assignemts (from newest commision). STUDENT Token needs to be provided. This method is depreaceted. Use `/api/v1/commisions/user/schedule` instead.")
 | 
			
		||||
    @Deprecated
 | 
			
		||||
    public ResponseEntity<List<AssignmentResponse>> getCurrentAssignments() throws Exception {
 | 
			
		||||
        User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException("User not found"));
 | 
			
		||||
        Optional<Commision> com = this.commisionService.getNewestCommision(user);
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,12 @@ import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.util.Assert;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestParam;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.responses.mappers.AssignmentResponseMappers;
 | 
			
		||||
import com.plannaplan.responses.models.AssignmentResponse;
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
@CrossOrigin
 | 
			
		||||
@@ -76,7 +82,7 @@ public class CommisionController extends TokenBasedController {
 | 
			
		||||
                        Assert.isTrue(!notExistingGroup.isPresent(), "Group "
 | 
			
		||||
                                        + notExistingGroup.orElse(Long.MIN_VALUE).toString() + "doesn't exist");
 | 
			
		||||
 | 
			
		||||
                        final Commision com = new Commision(user);
 | 
			
		||||
                        final Commision com = new Commision(user, asker);
 | 
			
		||||
                        this.commisionService.save(com);
 | 
			
		||||
 | 
			
		||||
                        groups.stream().forEach((groupId) -> {
 | 
			
		||||
@@ -96,22 +102,75 @@ public class CommisionController extends TokenBasedController {
 | 
			
		||||
 | 
			
		||||
        @GetMapping("/user")
 | 
			
		||||
        @ApiOperation("Return list of user all commisions (history of schedules)")
 | 
			
		||||
        public ResponseEntity<List<CommisionResponse>> getAlCommisions() throws UserNotFoundException {
 | 
			
		||||
        public ResponseEntity<List<? extends CommisionResponse>> getAlCommisions(
 | 
			
		||||
                        @RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if we want to display wiht commision's group ids") Boolean groups)
 | 
			
		||||
                        throws UserNotFoundException {
 | 
			
		||||
                User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException());
 | 
			
		||||
                List<CommisionResponse> result = CommisionResponseMappers
 | 
			
		||||
                                .mapToResponse(this.commisionService.getUsersCommisions(user));
 | 
			
		||||
 | 
			
		||||
                List<? extends CommisionResponse> result;
 | 
			
		||||
 | 
			
		||||
                if (!groups) {
 | 
			
		||||
                        result = CommisionResponseMappers.mapToResponse(this.commisionService.getUsersCommisions(user));
 | 
			
		||||
                } else {
 | 
			
		||||
                        result = CommisionResponseMappers
 | 
			
		||||
                                        .mapToResponseWithGroups(this.commisionService.getUsersCommisions(user));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return new ResponseEntity<>(result, HttpStatus.OK);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @GetMapping("/user/schedule")
 | 
			
		||||
        @ApiOperation(value = "Return user current assignemts (from newest commision). STUDENT Token needs to be provided.")
 | 
			
		||||
        public ResponseEntity<List<AssignmentResponse>> getCurrentAssignments() throws Exception {
 | 
			
		||||
                User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException("User not found"));
 | 
			
		||||
                Optional<Commision> com = this.commisionService.getNewestCommision(user);
 | 
			
		||||
 | 
			
		||||
                if (com.isPresent()) {
 | 
			
		||||
                        List<Assignment> respone = this.assignmentService.getCommisionAssignments(com.get());
 | 
			
		||||
                        return new ResponseEntity<>(AssignmentResponseMappers.mapToResponse(respone), HttpStatus.OK);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return new ResponseEntity<>(new ArrayList<>(), HttpStatus.OK);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @PreAuthorize("hasRole('ROLE_DEANERY')")
 | 
			
		||||
        @GetMapping("/user/{id}")
 | 
			
		||||
        @ApiOperation("Return list of commisions for given user. To be able to access this data u need to provide DEANERY token")
 | 
			
		||||
        public ResponseEntity<List<CommisionResponse>> getCommision(@PathVariable(name = "id") Long userId)
 | 
			
		||||
        public ResponseEntity<List<? extends CommisionResponse>> getCommision(@PathVariable(name = "id") Long userId,
 | 
			
		||||
                        @RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if we want to display wiht commision's group ids") Boolean groups)
 | 
			
		||||
                        throws UserNotFoundException {
 | 
			
		||||
                User user = this.userService.getById(userId).orElseThrow(() -> new NullPointerException());
 | 
			
		||||
                List<CommisionResponse> result = CommisionResponseMappers
 | 
			
		||||
                                .mapToResponse(this.commisionService.getUsersCommisions(user));
 | 
			
		||||
                List<? extends CommisionResponse> result;
 | 
			
		||||
 | 
			
		||||
                if (!groups) {
 | 
			
		||||
                        result = CommisionResponseMappers.mapToResponse(this.commisionService.getUsersCommisions(user));
 | 
			
		||||
                } else {
 | 
			
		||||
                        result = CommisionResponseMappers
 | 
			
		||||
                                        .mapToResponseWithGroups(this.commisionService.getUsersCommisions(user));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return new ResponseEntity<>(result, HttpStatus.OK);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @PreAuthorize("hasRole('ROLE_DEANERY')")
 | 
			
		||||
        @GetMapping("/user/{id}/schedule")
 | 
			
		||||
        @ApiOperation(value = "Return given user current assignemts (from newest commision). DEANERY Token needs to be provided.")
 | 
			
		||||
        public ResponseEntity<List<AssignmentResponse>> getCurrentAssignmentsDeanery(
 | 
			
		||||
                        @PathVariable(name = "id") Long userId) throws Exception {
 | 
			
		||||
                User user = this.userService.getById(userId).orElseThrow(() -> new NullPointerException());
 | 
			
		||||
 | 
			
		||||
                if (user.getRole() == UserRoles.DEANERY) {
 | 
			
		||||
                        return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                Optional<Commision> com = this.commisionService.getNewestCommision(user);
 | 
			
		||||
 | 
			
		||||
                if (com.isPresent()) {
 | 
			
		||||
                        List<Assignment> respone = this.assignmentService.getCommisionAssignments(com.get());
 | 
			
		||||
                        return new ResponseEntity<>(AssignmentResponseMappers.mapToResponse(respone), HttpStatus.OK);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return new ResponseEntity<>(new ArrayList<>(), HttpStatus.OK);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,12 +4,15 @@ import org.springframework.web.bind.annotation.CrossOrigin;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.App;
 | 
			
		||||
import com.plannaplan.models.ConfigData;
 | 
			
		||||
import com.plannaplan.models.TourData;
 | 
			
		||||
import com.plannaplan.services.ConfiguratorService;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.springframework.http.ResponseEntity;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
@@ -33,13 +36,26 @@ public class ConfigController {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ConfiguratorService contrl;
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/config")
 | 
			
		||||
    @PostMapping(path = "/config", consumes = { "multipart/form-data" })
 | 
			
		||||
    @PreAuthorize("hasRole('ROLE_ADMIN')")
 | 
			
		||||
    @ApiOperation("Imports data to system. To call you need to provide ADMIN token")
 | 
			
		||||
    public ResponseEntity<String> configApp(
 | 
			
		||||
            @RequestParam("file") @ApiParam(value = "file .xlsx that contains courses and groups with apoinnted rules") MultipartFile file) {
 | 
			
		||||
            @RequestParam("file") @ApiParam(value = "file .xlsx that contains courses and groups with apoinnted rules") MultipartFile file,
 | 
			
		||||
            @RequestParam("firstTourBegin") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when first tour begin in format dd.MM.yyyy") Date firstTourBegin,
 | 
			
		||||
            @RequestParam("firstTourEnd") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when first tour ends in format dd.MM.yyyy") Date firstTourEnd,
 | 
			
		||||
            @RequestParam("secondTourBegin") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when second tour begin in format dd.MM.yyyy") Date secondTourBegin,
 | 
			
		||||
            @RequestParam("secondTourEnd") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when second tour ends in format dd.MM.yyyy") Date secondTourEnd) {
 | 
			
		||||
        try {
 | 
			
		||||
            final ConfigData data = new ConfigData(null, null, file.getInputStream());
 | 
			
		||||
            if (!(firstTourBegin.before(firstTourEnd)
 | 
			
		||||
                    && (firstTourEnd.before(secondTourBegin) || firstTourEnd.equals(secondTourBegin))
 | 
			
		||||
                    && secondTourBegin.before(secondTourEnd))) {
 | 
			
		||||
                return new ResponseEntity<>("Bad dates", HttpStatus.BAD_REQUEST);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            final TourData firstTour = new TourData(firstTourBegin, firstTourEnd);
 | 
			
		||||
            final TourData secondTour = new TourData(secondTourBegin, secondTourEnd);
 | 
			
		||||
 | 
			
		||||
            final ConfigData data = new ConfigData(firstTour, secondTour, file.getInputStream());
 | 
			
		||||
            this.contrl.config(data);
 | 
			
		||||
            return new ResponseEntity<>("Sucess", HttpStatus.OK);
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package com.plannaplan.controllers;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.App;
 | 
			
		||||
import com.plannaplan.entities.Groups;
 | 
			
		||||
@@ -13,9 +14,11 @@ import com.plannaplan.services.GroupService;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.springframework.http.ResponseEntity;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.CrossOrigin;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestParam;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
@@ -57,4 +60,20 @@ public class GroupController {
 | 
			
		||||
        }
 | 
			
		||||
        return new ResponseEntity<>(GroupsMappers.mapToGetCourseGroupsDefaultResponse(groups), HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PutMapping("/{id}/capacity")
 | 
			
		||||
    @PreAuthorize("hasRole('ROLE_DEANERY')")
 | 
			
		||||
    @ApiOperation(value = "Change capacity of given group. You need to provide DEANERY token to be ale to change capacity")
 | 
			
		||||
    public ResponseEntity<String> updateCapacity(
 | 
			
		||||
            @PathVariable(name = "id", required = true) @ApiParam(value = "id of group to change capacity") Long id,
 | 
			
		||||
            @RequestParam(name = "newcapacity", required = true) Integer newcapacity) {
 | 
			
		||||
        final Optional<Groups> group = this.groupService.getGroupById(id);
 | 
			
		||||
        if (group.isEmpty()) {
 | 
			
		||||
            return new ResponseEntity<>("Given group doens't exist", HttpStatus.NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        final Groups gr = group.get();
 | 
			
		||||
        gr.setCapacity(newcapacity);
 | 
			
		||||
        this.groupService.save(gr);
 | 
			
		||||
        return new ResponseEntity<>("Success", HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,8 @@
 | 
			
		||||
package com.plannaplan.controllers;
 | 
			
		||||
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.User;
 | 
			
		||||
import com.plannaplan.exceptions.UserNotFoundException;
 | 
			
		||||
import com.plannaplan.responses.models.TokenResponse;
 | 
			
		||||
@@ -61,4 +64,20 @@ public class TokenController {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/token/refresh")
 | 
			
		||||
    @ApiOperation(value = "Endpoint to access new token based on refresh token. It's needed when request with provided token fail with code 403")
 | 
			
		||||
    public ResponseEntity<TokenResponse> getRefreshToken(
 | 
			
		||||
            @RequestParam("refreshToken") @ApiParam(value = "Refresh token obtained in /token request") final String refreshToken)
 | 
			
		||||
            throws NullPointerException {
 | 
			
		||||
        Optional<User> userResult = this.userService.getUserByRefreshToken(refreshToken);
 | 
			
		||||
        if (userResult.isEmpty()) {
 | 
			
		||||
            return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        User user = userResult.get();
 | 
			
		||||
        user.setToken(UUID.randomUUID().toString());
 | 
			
		||||
        user = this.userService.save(user);
 | 
			
		||||
        return new ResponseEntity<>(new TokenResponse(user), HttpStatus.OK);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ public class UsersController {
 | 
			
		||||
    @PreAuthorize("hasRole('ROLE_DEANERY')")
 | 
			
		||||
    @ApiOperation(value = "Gets all students. You need token with DEANERY role to call this")
 | 
			
		||||
    public ResponseEntity<List<UserResponse>> getAllStudents() {
 | 
			
		||||
        final List<User> searches = this.userService.searchForStudents("");
 | 
			
		||||
        final List<User> searches = this.userService.getAllStudents();
 | 
			
		||||
        final List<UserResponse> response = UserResponseMappers.mapToDefaultResponse(searches);
 | 
			
		||||
        return new ResponseEntity<>(response, HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -6,9 +6,15 @@ import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.Commision;
 | 
			
		||||
import com.plannaplan.responses.models.CommisionResponse;
 | 
			
		||||
import com.plannaplan.responses.models.CommisionWithGroupsResponse;
 | 
			
		||||
 | 
			
		||||
public class CommisionResponseMappers {
 | 
			
		||||
    public static final List<CommisionResponse> mapToResponse(List<Commision> commisions) {
 | 
			
		||||
        return commisions.stream().filter(Objects::nonNull).map(CommisionResponse::new).collect(Collectors.toList());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static final List<CommisionWithGroupsResponse> mapToResponseWithGroups(List<Commision> commisions) {
 | 
			
		||||
        return commisions.stream().filter(Objects::nonNull).map(CommisionWithGroupsResponse::new)
 | 
			
		||||
                .collect(Collectors.toList());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,5 @@
 | 
			
		||||
package com.plannaplan.responses.models;
 | 
			
		||||
 | 
			
		||||
import java.sql.Timestamp;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.Commision;
 | 
			
		||||
 | 
			
		||||
import io.swagger.annotations.ApiModel;
 | 
			
		||||
@@ -12,15 +10,32 @@ public class CommisionResponse {
 | 
			
		||||
    @ApiModelProperty(value = "ID created by database")
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "ID of user that commision belongs to")
 | 
			
		||||
    private UserResponse owner;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "ID of user that created commision")
 | 
			
		||||
    private UserResponse commiter;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "Timestamp where the user commit the commision")
 | 
			
		||||
    private Timestamp commisionDate;
 | 
			
		||||
    private String commisionDate;
 | 
			
		||||
 | 
			
		||||
    public CommisionResponse(Commision commision) {
 | 
			
		||||
        this.id = commision.getId();
 | 
			
		||||
        this.commisionDate = commision.getCommisionDate();
 | 
			
		||||
        this.commisionDate = commision.getCommisionDate().toString();
 | 
			
		||||
        this.owner = commision.getCommisionOwner() != null ? new UserResponse(commision.getCommisionOwner()) : null;
 | 
			
		||||
        this.commiter = commision.getCommisionCommiter() != null ? new UserResponse(commision.getCommisionCommiter())
 | 
			
		||||
                : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Timestamp getCommisionDate() {
 | 
			
		||||
    public UserResponse getCommiter() {
 | 
			
		||||
        return commiter;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public UserResponse getOwner() {
 | 
			
		||||
        return owner;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCommisionDate() {
 | 
			
		||||
        return commisionDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,36 @@
 | 
			
		||||
package com.plannaplan.responses.models;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.Assignment;
 | 
			
		||||
import com.plannaplan.entities.Commision;
 | 
			
		||||
 | 
			
		||||
import io.swagger.annotations.ApiModel;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
 | 
			
		||||
@ApiModel(description = "Response shows information about commision and its groups.", value = "CommisionWithGroupsResponse")
 | 
			
		||||
public class CommisionWithGroupsResponse extends CommisionResponse {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "List of groups ids in databse that belongs to commision")
 | 
			
		||||
    private List<Long> groups;
 | 
			
		||||
 | 
			
		||||
    public CommisionWithGroupsResponse(Commision commision) {
 | 
			
		||||
        super(commision);
 | 
			
		||||
        this.groups = commision.getAssignments().stream().filter(Objects::nonNull)
 | 
			
		||||
                .map(new Function<Assignment, Long>() {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public Long apply(Assignment arg0) {
 | 
			
		||||
                        return arg0.getGroup().getId();
 | 
			
		||||
                    }
 | 
			
		||||
                }).collect(Collectors.toList());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Long> getGroups() {
 | 
			
		||||
        return groups;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -21,6 +21,9 @@ public class GroupDefaultResponse {
 | 
			
		||||
    @ApiModelProperty(value = "Value shows time when the course takes.")
 | 
			
		||||
    private String time;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "Value shows time when the course ends.")
 | 
			
		||||
    private String endTime;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "Value shows degree, name and surname.")
 | 
			
		||||
    private String lecturer;
 | 
			
		||||
 | 
			
		||||
@@ -37,6 +40,7 @@ public class GroupDefaultResponse {
 | 
			
		||||
        this.id = group.getId() != null ? group.getId() : null;
 | 
			
		||||
        this.day = group.getDay() != null ? group.getDay().label : -1;
 | 
			
		||||
        this.time = group.getTimeString() != null ? group.getTimeString() : "";
 | 
			
		||||
        this.endTime = group.getEndTimeString() != null ? group.getEndTimeString() : "";
 | 
			
		||||
        this.lecturer = group.getLecturer() != null ? group.getLecturer().toString() : "";
 | 
			
		||||
        this.room = group.getRoom() != null ? group.getRoom() : "";
 | 
			
		||||
        this.type = group.getType() != null ? group.getType() : null;
 | 
			
		||||
@@ -67,6 +71,10 @@ public class GroupDefaultResponse {
 | 
			
		||||
        return time;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getEndTime() {
 | 
			
		||||
        return endTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getDay() {
 | 
			
		||||
        return day;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,8 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
public class TokenResponse {
 | 
			
		||||
    @ApiModelProperty(value = "user token used to verify requests")
 | 
			
		||||
    private String token;
 | 
			
		||||
    @ApiModelProperty(value = "user token needed to refresh")
 | 
			
		||||
    private String refreshToken;
 | 
			
		||||
    @ApiModelProperty(value = "user id in database")
 | 
			
		||||
    private Long id;
 | 
			
		||||
    @ApiModelProperty(value = "user app role")
 | 
			
		||||
@@ -21,6 +23,7 @@ public class TokenResponse {
 | 
			
		||||
        this.authorityRole = user.getRole().toString();
 | 
			
		||||
        this.email = user.getEmail();
 | 
			
		||||
        this.token = user.getToken();
 | 
			
		||||
        this.refreshToken = user.getRefreshToken();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getEmail() {
 | 
			
		||||
@@ -39,4 +42,8 @@ public class TokenResponse {
 | 
			
		||||
        return token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRefreshToken() {
 | 
			
		||||
        return this.refreshToken;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ public class UserResponse {
 | 
			
		||||
 | 
			
		||||
    public UserResponse(User user) {
 | 
			
		||||
        this.id = user.getId();
 | 
			
		||||
        this.name = user.getName();
 | 
			
		||||
        this.surname = user.getSurname();
 | 
			
		||||
        this.name = user.getName() != null ? user.getName() : "";
 | 
			
		||||
        this.surname = user.getSurname() != null ? user.getSurname() : "";
 | 
			
		||||
        this.email = user.getEmail();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,9 +37,10 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void configure(final WebSecurity webSecurity) {
 | 
			
		||||
        webSecurity.ignoring().antMatchers("/token**").antMatchers("/api/v1/courses/all")
 | 
			
		||||
                .antMatchers("/api/v1/groups/course/{id}").antMatchers("/v2/api-docs", "/configuration/ui",
 | 
			
		||||
                        "/swagger-resources/**", "/configuration/security", "/swagger-ui.html", "/webjars/**");
 | 
			
		||||
        webSecurity.ignoring().antMatchers("/token**").antMatchers("/token/refresh**")
 | 
			
		||||
                .antMatchers("/api/v1/courses/all").antMatchers("/api/v1/groups/course/{id}")
 | 
			
		||||
                .antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources/**", "/configuration/security",
 | 
			
		||||
                        "/swagger-ui.html", "/webjars/**");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,11 @@
 | 
			
		||||
            "name": "plannaplan.frontendUrl",
 | 
			
		||||
            "type": "java.lang.String",
 | 
			
		||||
            "description": "Url where frontend app is located"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "plannaplan.email",
 | 
			
		||||
            "type": "java.lang.String",
 | 
			
		||||
            "description": "Email from which app sends message"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,14 @@ spring.jpa.hibernate.ddl-auto=create-drop
 | 
			
		||||
spring.jackson.serialization.fail-on-empty-beans=false
 | 
			
		||||
spring.main.allow-bean-definition-overriding=true
 | 
			
		||||
spring.jackson.default-property-inclusion = NON_NULL
 | 
			
		||||
spring.mail.host=localhost
 | 
			
		||||
spring.mail.port=1025
 | 
			
		||||
# spring.mail.username=<login user to smtp server>
 | 
			
		||||
# spring.mail.password=<login password to smtp server>
 | 
			
		||||
spring.mail.properties.mail.smtp.auth=false
 | 
			
		||||
spring.mail.properties.mail.smtp.starttls.enable=false
 | 
			
		||||
logging.level.io.swagger.models.parameters.AbstractSerializableParameter=ERROR
 | 
			
		||||
server.port=1285
 | 
			
		||||
plannaplan.dev = true
 | 
			
		||||
plannaplan.frontendUrl= http://localhost:3000
 | 
			
		||||
plannaplan.frontendUrl = http://localhost:3000
 | 
			
		||||
plannaplan.email = plannaplan.kontakt@gmail.com
 | 
			
		||||
@@ -8,13 +8,20 @@ spring.jpa.hibernate.ddl-auto=update
 | 
			
		||||
spring.jackson.serialization.fail-on-empty-beans=false
 | 
			
		||||
spring.main.allow-bean-definition-overriding=true
 | 
			
		||||
spring.jackson.default-property-inclusion = NON_NULL
 | 
			
		||||
 | 
			
		||||
logging.level.io.swagger.models.parameters.AbstractSerializableParameter=ERROR
 | 
			
		||||
spring.mail.host=${PLANNAPLAN_EMAIL_HOST}
 | 
			
		||||
spring.mail.port=${PLANNAPLAN_EMAIL_PORT}
 | 
			
		||||
spring.mail.username=${PLANNAPLAN_EMAIL_USERNAME}
 | 
			
		||||
spring.mail.password=${PLANNAPLAN_EMAIL_PASSWORD}
 | 
			
		||||
spring.mail.properties.mail.smtp.auth=true
 | 
			
		||||
spring.mail.properties.mail.smtp.starttls.enable=true
 | 
			
		||||
server.port=1285
 | 
			
		||||
 | 
			
		||||
plannaplan.email = ${PLANNAPLAN_EMAIL}
 | 
			
		||||
plannaplan.dev = false
 | 
			
		||||
plannaplan.frontendUrl= https://wmi.plannaplan.pl
 | 
			
		||||
security.require-ssl=true
 | 
			
		||||
server.ssl.key-store=/keys/keystore.p12
 | 
			
		||||
server.ssl.key-store-password=
 | 
			
		||||
server.ssl.keyStoreType=PKCS12
 | 
			
		||||
server.ssl.keyAlias=tomcat
 | 
			
		||||
server.ssl.keyAlias=tomcat
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,7 @@ public class CommisionControllerTest extends AbstractControllerTest {
 | 
			
		||||
    private static final String ADD_COMMISION_ENDPOINT = "/api/v1/commisions/user";
 | 
			
		||||
    private static final String GET_COMMISIONS_ENDPOINT = "/api/v1/commisions/user";
 | 
			
		||||
    private static final String GET_SOMEONE_COMMISIONS_ENDPOINT = "/api/v1/commisions/user";
 | 
			
		||||
    private static final String GET_USER_SCHEDULE_ENDPOINT = "/api/v1/commisions/user/schedule";
 | 
			
		||||
 | 
			
		||||
    private static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(),
 | 
			
		||||
            MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));
 | 
			
		||||
@@ -190,6 +191,58 @@ public class CommisionControllerTest extends AbstractControllerTest {
 | 
			
		||||
                .header("Authorization", "Bearer " + token)).andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturn4xxInScheduleEndpoint() throws Exception {
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(get(GET_USER_SCHEDULE_ENDPOINT)).andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnOkInScheduleEdnpoint() throws Exception {
 | 
			
		||||
        final User user = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null);
 | 
			
		||||
        final String token = this.service.login(user).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(get(GET_USER_SCHEDULE_ENDPOINT).header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnOkInScheduleEdnpointByDeanery() throws Exception {
 | 
			
		||||
        this.checkUsers();
 | 
			
		||||
        final User user = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null);
 | 
			
		||||
        final User student = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null);
 | 
			
		||||
        final String token = this.service.login(user).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(get(GET_COMMISIONS_ENDPOINT + "/" + student.getId() + "/schedule").header("Authorization",
 | 
			
		||||
                "Bearer " + token)).andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailInScheduleEdnpointByOtherStudent() throws Exception {
 | 
			
		||||
        this.checkUsers();
 | 
			
		||||
        final User student = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null);
 | 
			
		||||
        final User otherStudent = this.service.checkForUser(TEST_COMMISIONS_OTHER_STUDENT_EMAIL, null);
 | 
			
		||||
        final String token = this.service.login(student).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(get(GET_COMMISIONS_ENDPOINT + "/" + otherStudent.getId() + "/schedule").header("Authorization",
 | 
			
		||||
                "Bearer " + token)).andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailInScheduleEdnpointByDeaneryDeaneryRelation() throws Exception {
 | 
			
		||||
        this.checkUsers();
 | 
			
		||||
        final User deanery = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null);
 | 
			
		||||
        final User otherDeanery = this.service.checkForUser(TEST_COMMISIONS_OTHER_DEANERY_EMAIL, null);
 | 
			
		||||
        final String token = this.service.login(deanery).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(get(GET_COMMISIONS_ENDPOINT + "/" + otherDeanery.getId() + "/schedule").header("Authorization",
 | 
			
		||||
                "Bearer " + token)).andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void checkUsers() {
 | 
			
		||||
        if (CommisionControllerTest.user == null) {
 | 
			
		||||
            CommisionControllerTest.user = new User(null, null, TEST_COMMISIONS_STUDENT_EMAIL, UserRoles.STUDENT);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,15 @@ package com.plannaplan.controllers;
 | 
			
		||||
 | 
			
		||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart;
 | 
			
		||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertTrue;
 | 
			
		||||
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
 | 
			
		||||
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.sql.Date;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.AppConfig;
 | 
			
		||||
import com.plannaplan.entities.User;
 | 
			
		||||
import com.plannaplan.services.ConfiguratorService;
 | 
			
		||||
import com.plannaplan.services.UserService;
 | 
			
		||||
import com.plannaplan.types.UserRoles;
 | 
			
		||||
 | 
			
		||||
@@ -28,9 +32,15 @@ public class ConfigControllerTest extends AbstractControllerTest {
 | 
			
		||||
 | 
			
		||||
    private static final String FILE_NAME = "Zajecia.xlsx";
 | 
			
		||||
    private static final String CONFIG_ENDPOINT = "/api/v1/configurator/config";
 | 
			
		||||
    private static final String FIRST_TOUR_START = "firstTourBegin";
 | 
			
		||||
    private static final String FIRST_TOUR_END = "firstTourEnd";
 | 
			
		||||
    private static final String SECOND_TOUR_START = "secondTourBegin";
 | 
			
		||||
    private static final String SECOND_TOUR_END = "secondTourEnd";
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private UserService service;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ConfiguratorService configService;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnNoAuthorized() throws Exception {
 | 
			
		||||
@@ -52,11 +62,40 @@ public class ConfigControllerTest extends AbstractControllerTest {
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).header("Authorization", "Bearer " + token))
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).param(FIRST_TOUR_START, "12.12.2020")
 | 
			
		||||
                .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020")
 | 
			
		||||
                .param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldInsertedDataBeSameInDatabase() throws Exception {
 | 
			
		||||
        final String mail = "shouldReturnOKAuthorized@ConfigController.test";
 | 
			
		||||
        final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
 | 
			
		||||
 | 
			
		||||
        final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
 | 
			
		||||
        final MockMultipartFile file = new MockMultipartFile("file", inputStream);
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).param(FIRST_TOUR_START, "12.12.2020")
 | 
			
		||||
                .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020")
 | 
			
		||||
                .param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
        final AppConfig config = this.configService.getCurrentConfig();
 | 
			
		||||
        assertTrue(config.getFirstTourStart().compareTo(Date.valueOf("2020-12-12")) == 0,
 | 
			
		||||
                "Date in database is wrong. Perhabs database has wrong timezone set.");
 | 
			
		||||
        assertTrue(config.getFirstTourEnd().compareTo(Date.valueOf("2020-12-14")) == 0,
 | 
			
		||||
                "Date in database is wrong. Perhabs database has wrong timezone set.");
 | 
			
		||||
        assertTrue(config.getSecondTourStart().compareTo(Date.valueOf("2020-12-16")) == 0,
 | 
			
		||||
                "Date in database is wrong. Perhabs database has wrong timezone set.");
 | 
			
		||||
        assertTrue(config.getSecondTourEnd().compareTo(Date.valueOf("2020-12-20")) == 0,
 | 
			
		||||
                "Date in database is wrong. Perhabs database has wrong timezone set.");
 | 
			
		||||
        // yyyy-mm-dd
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldReturnDenyNoAdminAuthorized() throws Exception {
 | 
			
		||||
        final String mail = "shouldReturnDenyNoAdminAuthorized@ConfigController.test";
 | 
			
		||||
@@ -72,4 +111,112 @@ public class ConfigControllerTest extends AbstractControllerTest {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailDueToWrongFirstTour() throws Exception {
 | 
			
		||||
        final String mail = "shouldFailDueToWrongFirstTour@ConfigController.test";
 | 
			
		||||
        final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
 | 
			
		||||
 | 
			
		||||
        final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
 | 
			
		||||
        final MockMultipartFile file = new MockMultipartFile("file", inputStream);
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).param(FIRST_TOUR_START, "12.12.2020")
 | 
			
		||||
                .param(FIRST_TOUR_END, "12.12.2020").param(SECOND_TOUR_START, "16.12.2020")
 | 
			
		||||
                .param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailDueToWrongSecondTour() throws Exception {
 | 
			
		||||
        final String mail = "shouldFailDueToWrongSecondTour@ConfigController.test";
 | 
			
		||||
        final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
 | 
			
		||||
 | 
			
		||||
        final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
 | 
			
		||||
        final MockMultipartFile file = new MockMultipartFile("file", inputStream);
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).param(FIRST_TOUR_START, "12.12.2020")
 | 
			
		||||
                .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020")
 | 
			
		||||
                .param(SECOND_TOUR_END, "16.12.2020").header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailDueToWrongBothTour() throws Exception {
 | 
			
		||||
        final String mail = "shouldFailDueToWrongBothTour@ConfigController.test";
 | 
			
		||||
        final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
 | 
			
		||||
 | 
			
		||||
        final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
 | 
			
		||||
        final MockMultipartFile file = new MockMultipartFile("file", inputStream);
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).param(FIRST_TOUR_START, "12.12.2020")
 | 
			
		||||
                .param(FIRST_TOUR_END, "12.12.2020").param(SECOND_TOUR_START, "16.12.2020")
 | 
			
		||||
                .param(SECOND_TOUR_END, "16.12.2020").header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailDueToWrongTourTransition() throws Exception {
 | 
			
		||||
        final String mail = "shouldFailDueToWrongTourTransition@ConfigController.test";
 | 
			
		||||
        final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
 | 
			
		||||
 | 
			
		||||
        final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
 | 
			
		||||
        final MockMultipartFile file = new MockMultipartFile("file", inputStream);
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).param(FIRST_TOUR_START, "12.12.2020")
 | 
			
		||||
                .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "13.12.2020")
 | 
			
		||||
                .param(SECOND_TOUR_END, "16.12.2020").header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailDueToWrongDateFormat() throws Exception {
 | 
			
		||||
        final String mail = "shouldFailDueToWrongDateFormat@ConfigController.test";
 | 
			
		||||
        final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
 | 
			
		||||
 | 
			
		||||
        final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
 | 
			
		||||
        final MockMultipartFile file = new MockMultipartFile("file", inputStream);
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).param(FIRST_TOUR_START, "12.12.2020")
 | 
			
		||||
                .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020")
 | 
			
		||||
                .param(SECOND_TOUR_END, "20/12/2020").header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailDueToNoDate() throws Exception {
 | 
			
		||||
        final String mail = "shouldFailDueToNoDate@ConfigController.test";
 | 
			
		||||
        final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
 | 
			
		||||
 | 
			
		||||
        final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
 | 
			
		||||
        final MockMultipartFile file = new MockMultipartFile("file", inputStream);
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailDueToNoFile() throws Exception {
 | 
			
		||||
        final String mail = "shouldFailDueToNoFile@ConfigController.test";
 | 
			
		||||
        final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
 | 
			
		||||
 | 
			
		||||
        final String token = this.service.login(usr).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(multipart(CONFIG_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020")
 | 
			
		||||
                .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020")
 | 
			
		||||
                .param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package com.plannaplan.controllers;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.junit.runner.RunWith;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.boot.test.context.SpringBootTest;
 | 
			
		||||
import org.springframework.test.context.ContextConfiguration;
 | 
			
		||||
import org.springframework.test.context.junit4.SpringRunner;
 | 
			
		||||
@@ -9,7 +10,17 @@ import org.springframework.test.web.servlet.MockMvc;
 | 
			
		||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 | 
			
		||||
 | 
			
		||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
 | 
			
		||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
 | 
			
		||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertTrue;
 | 
			
		||||
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.Groups;
 | 
			
		||||
import com.plannaplan.entities.User;
 | 
			
		||||
import com.plannaplan.services.GroupService;
 | 
			
		||||
import com.plannaplan.services.UserService;
 | 
			
		||||
import com.plannaplan.types.UserRoles;
 | 
			
		||||
import com.plannaplan.types.WeekDay;
 | 
			
		||||
 | 
			
		||||
@RunWith(SpringRunner.class)
 | 
			
		||||
@SpringBootTest
 | 
			
		||||
@@ -17,6 +28,13 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 | 
			
		||||
 | 
			
		||||
public class GroupControllerTest extends AbstractControllerTest {
 | 
			
		||||
    private static final String GROUPS_BY_COURSE_ENDPOINT = "/api/v1/groups/course";
 | 
			
		||||
    private static final String UPDATE_GROUPS_ENDPOINT = "/api/v1/groups/521/capacity";
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private UserService service;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private GroupService groupService;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailWithNoParaeter() throws Exception {
 | 
			
		||||
@@ -29,4 +47,59 @@ public class GroupControllerTest extends AbstractControllerTest {
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
 | 
			
		||||
        mockMvc.perform(get(GROUPS_BY_COURSE_ENDPOINT + "/2")).andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailWithNoToken() throws Exception {
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(put(UPDATE_GROUPS_ENDPOINT)).andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailWithStudentToken() throws Exception {
 | 
			
		||||
        final User user = this.service
 | 
			
		||||
                .save(new User(null, null, "shouldFailWithStudentToken@GroupController.test", UserRoles.STUDENT));
 | 
			
		||||
        final String token = this.service.login(user).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(put(UPDATE_GROUPS_ENDPOINT).header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailWithNoParams() throws Exception {
 | 
			
		||||
        final User user = this.service
 | 
			
		||||
                .save(new User(null, null, "shouldFailWithNoParams@GroupController.test", UserRoles.DEANERY));
 | 
			
		||||
        final String token = this.service.login(user).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(put(UPDATE_GROUPS_ENDPOINT).header("Authorization", "Bearer " + token))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailWithWrongId() throws Exception {
 | 
			
		||||
        final User user = this.service
 | 
			
		||||
                .save(new User(null, null, "shouldFailWithWrongId@GroupController.test", UserRoles.DEANERY));
 | 
			
		||||
        final String token = this.service.login(user).getToken();
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(put("/api/v1/groups/" + user.getId() + "/capacity").param("newcapacity", "23")
 | 
			
		||||
                .header("Authorization", "Bearer " + token)).andExpect(status().isNotFound());
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldChangeCapacity() throws Exception {
 | 
			
		||||
        final User user = this.service
 | 
			
		||||
                .save(new User(null, null, "shouldChangeCapacity@GroupController.test", UserRoles.DEANERY));
 | 
			
		||||
        final String token = this.service.login(user).getToken();
 | 
			
		||||
        final Groups newGroup = this.groupService.save(new Groups(43, "A-Nigzdie", null, 436, WeekDay.FRIDAY, null));
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
 | 
			
		||||
        mockMvc.perform(put("/api/v1/groups/" + newGroup.getId() + "/capacity").param("newcapacity", "23")
 | 
			
		||||
                .header("Authorization", "Bearer " + token)).andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
        assertTrue(this.groupService.getGroupById(newGroup.getId()).get().getCapacity() == 23);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ package com.plannaplan.controllers;
 | 
			
		||||
import org.junit.Ignore;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.junit.runner.RunWith;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.boot.test.context.SpringBootTest;
 | 
			
		||||
import org.springframework.test.context.ContextConfiguration;
 | 
			
		||||
import org.springframework.test.context.junit4.SpringRunner;
 | 
			
		||||
@@ -12,11 +13,22 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 | 
			
		||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
 | 
			
		||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.sql.Timestamp;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.User;
 | 
			
		||||
import com.plannaplan.services.UserService;
 | 
			
		||||
import com.plannaplan.types.UserRoles;
 | 
			
		||||
 | 
			
		||||
@RunWith(SpringRunner.class)
 | 
			
		||||
@SpringBootTest
 | 
			
		||||
@ContextConfiguration
 | 
			
		||||
public class TokenControllerTest extends AbstractControllerTest {
 | 
			
		||||
    private final String TOKEN_ENDPOINT = "/token";
 | 
			
		||||
    private final String REFRESH_TOKEN_ENDPOINT = "/token/refresh";
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private UserService service;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailWithNoParameter() throws Exception {
 | 
			
		||||
@@ -39,4 +51,39 @@ public class TokenControllerTest extends AbstractControllerTest {
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
 | 
			
		||||
        mockMvc.perform(get(TOKEN_ENDPOINT).param("ticket", ticket)).andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailWithWrongRefreshToken() throws Exception {
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
 | 
			
		||||
        mockMvc.perform(get(REFRESH_TOKEN_ENDPOINT).param("refreshToken", "totaly-wrong-refresh-token"))
 | 
			
		||||
                .andExpect(status().is4xxClientError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldRetrunTokenBeforeExpirationOfOldOne() throws Exception {
 | 
			
		||||
        User user = new User("Eren", "Yager", "shouldRetrunTokenBeforeExpirationOfOldOne@TokenController.test",
 | 
			
		||||
                UserRoles.TEST_USER);
 | 
			
		||||
        user.setToken("Totalnie-bezpieczny-token");
 | 
			
		||||
        this.service.save(user);
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
 | 
			
		||||
        mockMvc.perform(get(REFRESH_TOKEN_ENDPOINT).param("refreshToken", user.getRefreshToken()))
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldRetrunTokenAfterExpirationOfOldOne() throws Exception {
 | 
			
		||||
        final Field reader = User.class.getDeclaredField("tokenUsageDate");
 | 
			
		||||
        reader.setAccessible(true);
 | 
			
		||||
 | 
			
		||||
        User user = new User("Mikasa", "Ackerman", "shouldRetrunTokenAfterExpirationOfOldOne@TokenController.test",
 | 
			
		||||
                UserRoles.TEST_USER);
 | 
			
		||||
        user.setToken("Totalnie-bezpieczny-token");
 | 
			
		||||
        reader.set(user, new Timestamp(System.currentTimeMillis() - 86400000));
 | 
			
		||||
        this.service.save(user);
 | 
			
		||||
 | 
			
		||||
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
 | 
			
		||||
        mockMvc.perform(get(REFRESH_TOKEN_ENDPOINT).param("refreshToken", user.getRefreshToken()))
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,16 @@ package com.plannaplan.responses.mappers;
 | 
			
		||||
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertTrue;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.Assignment;
 | 
			
		||||
import com.plannaplan.entities.Commision;
 | 
			
		||||
import com.plannaplan.entities.Groups;
 | 
			
		||||
import com.plannaplan.responses.models.CommisionResponse;
 | 
			
		||||
import com.plannaplan.responses.models.CommisionWithGroupsResponse;
 | 
			
		||||
import com.plannaplan.types.WeekDay;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
@@ -17,7 +22,36 @@ public class CommisionResponseMappersTest {
 | 
			
		||||
        final List<CommisionResponse> resposne = CommisionResponseMappers.mapToResponse(coms);
 | 
			
		||||
 | 
			
		||||
        assertTrue(resposne.get(0) instanceof CommisionResponse);
 | 
			
		||||
        assertTrue(resposne.get(0).getCommisionDate().equals(coms.get(0).getCommisionDate()));
 | 
			
		||||
        assertTrue(resposne.get(1).getCommisionDate().equals(coms.get(1).getCommisionDate()));
 | 
			
		||||
        assertTrue(resposne.get(0).getCommisionDate().equals(coms.get(0).getCommisionDate().toString()));
 | 
			
		||||
        assertTrue(resposne.get(1).getCommisionDate().equals(coms.get(1).getCommisionDate().toString()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldMapListWithEntityToListOfResponsesWithGroups()
 | 
			
		||||
            throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
 | 
			
		||||
 | 
			
		||||
        final Field reader = Commision.class.getDeclaredField("assignments");
 | 
			
		||||
        final Field groupReader = Groups.class.getDeclaredField("id");
 | 
			
		||||
        reader.setAccessible(true);
 | 
			
		||||
        groupReader.setAccessible(true);
 | 
			
		||||
 | 
			
		||||
        final Commision com1 = new Commision(null);
 | 
			
		||||
        final Groups group1 = new Groups(43, "BRAK", null, 840, WeekDay.MONDAY, null);
 | 
			
		||||
 | 
			
		||||
        groupReader.set(group1, Long.valueOf(8));
 | 
			
		||||
        reader.set(com1, Arrays.asList(new Assignment(group1, com1)));
 | 
			
		||||
 | 
			
		||||
        final Commision com2 = new Commision(null);
 | 
			
		||||
        final Groups group2 = new Groups(124, "BRAK", null, 900, WeekDay.WEDNESDAY, null);
 | 
			
		||||
 | 
			
		||||
        groupReader.set(group2, Long.valueOf(9));
 | 
			
		||||
        reader.set(com2, Arrays.asList(new Assignment(group2, com2)));
 | 
			
		||||
 | 
			
		||||
        final List<CommisionWithGroupsResponse> resposne = CommisionResponseMappers
 | 
			
		||||
                .mapToResponseWithGroups(Arrays.asList(com1, com2));
 | 
			
		||||
 | 
			
		||||
        assertTrue(resposne.size() == 2);
 | 
			
		||||
        assertTrue(resposne.get(0).getGroups().get(0) == 8);
 | 
			
		||||
        assertTrue(resposne.get(1).getGroups().get(0) == 9);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,6 @@ public class CommisionResponseTest {
 | 
			
		||||
        final Commision com = new Commision(null);
 | 
			
		||||
        final CommisionResponse comResponse = new CommisionResponse(com);
 | 
			
		||||
 | 
			
		||||
        assertTrue(comResponse.getCommisionDate().equals(com.getCommisionDate()));
 | 
			
		||||
        assertTrue(comResponse.getCommisionDate().equals(com.getCommisionDate().toString()));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,34 @@
 | 
			
		||||
package com.plannaplan.responses.models;
 | 
			
		||||
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertTrue;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
 | 
			
		||||
import com.plannaplan.entities.Assignment;
 | 
			
		||||
import com.plannaplan.entities.Commision;
 | 
			
		||||
import com.plannaplan.entities.Groups;
 | 
			
		||||
import com.plannaplan.types.WeekDay;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
public class CommisionWithGroupsResponseTest {
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldMapCommisionToResponse()
 | 
			
		||||
            throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
 | 
			
		||||
        final Field reader = Commision.class.getDeclaredField("assignments");
 | 
			
		||||
        final Field groupReader = Groups.class.getDeclaredField("id");
 | 
			
		||||
        reader.setAccessible(true);
 | 
			
		||||
        groupReader.setAccessible(true);
 | 
			
		||||
 | 
			
		||||
        final Commision com = new Commision(null);
 | 
			
		||||
        final Groups group = new Groups(43, "BRAK", null, 840, WeekDay.MONDAY, null);
 | 
			
		||||
 | 
			
		||||
        groupReader.set(group, Long.valueOf(8));
 | 
			
		||||
        reader.set(com, Arrays.asList(new Assignment(group, com)));
 | 
			
		||||
 | 
			
		||||
        final CommisionWithGroupsResponse comResponse = new CommisionWithGroupsResponse(com);
 | 
			
		||||
 | 
			
		||||
        assertTrue(comResponse.getGroups().get(0) == 8);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package com.plannaplan.security.cas;
 | 
			
		||||
 | 
			
		||||
import org.junit.Ignore;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
 | 
			
		||||
@@ -9,12 +10,15 @@ public class CustomUAMCasValidatorTest {
 | 
			
		||||
    private String serviceUrl;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void shouldValidateWithDomain() {
 | 
			
		||||
        
 | 
			
		||||
        CustomUAMCasValidator validator = new CustomUAMCasValidator(serviceUrl, "ST-54649-5x4h09vzUpEIyAGmf1sz-cas.amu.edu.pl");
 | 
			
		||||
        
 | 
			
		||||
        validator.validate();
 | 
			
		||||
        // you need to privide fresh ticket to make this test pass that's why it is
 | 
			
		||||
        // marked as ignored
 | 
			
		||||
 | 
			
		||||
        CustomUAMCasValidator validator = new CustomUAMCasValidator(serviceUrl,
 | 
			
		||||
                "ST-54649-5x4h09vzUpEIyAGmf1sz-cas.amu.edu.pl");
 | 
			
		||||
 | 
			
		||||
        validator.validate();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user