Removed Google Update Classes, disabled Event detail view.

master
Markus Kreth 7 years ago
parent 00b62e4167
commit fa1f2fb30d
  1. 2
      .classpath
  2. 46
      pom.xml
  3. 154
      src/main/java/de/kreth/clubhelperbackend/google/GoogleBaseAdapter.java
  4. 175
      src/main/java/de/kreth/clubhelperbackend/google/calendar/CalendarAdapter.java
  5. 80
      src/main/java/de/kreth/clubhelperbackend/google/calendar/CalendarResource.java
  6. 98
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CalendarTaskRefresher.java
  7. 3
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoImpl.java
  8. 24
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainUi.java
  9. 18
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarCreator.java
  10. 5
      src/main/resources/hibernate.cfg.xml
  11. 2
      src/test/java/de/kreth/vaadin/clubhelper/HibernateHolder.java
  12. 48
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CalendarTaskRefresherTest.java
  13. 2
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessTest.java
  14. 2
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/tests/TestConfiguration.java
  15. 2
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/tests/VaadinClubhelperApplicationTests.java

@ -30,7 +30,7 @@
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/classes" path="target/generated-resources/gwt">
<classpathentry excluding="**" kind="src" output="target/classes" path="target/generated-resources/gwt">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="optional" value="true"/>

@ -98,37 +98,6 @@
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-calendar</artifactId>
<version>${google-api-calendar-version}</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava-jdk5</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-appengine</artifactId>
<version>${google-api-version}</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-gson</artifactId>
<version>${google-api-version}</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-java6</artifactId>
<version>${google-api-version}</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>${google-api-version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
@ -157,11 +126,11 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.security</groupId> -->
<!-- <artifactId>spring-security-test</artifactId> -->
<!-- <scope>test</scope> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.security</groupId> -->
<!-- <artifactId>spring-security-test</artifactId> -->
<!-- <scope>test</scope> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
@ -247,6 +216,11 @@
<artifactId>jasperreports-functions</artifactId>
<version>6.7.0</version>
</dependency>
<dependency>
<groupId>de.kreth.googleconnect</groupId>
<artifactId>GoogleConnectors</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<dependencyManagement>

@ -1,154 +0,0 @@
package de.kreth.clubhelperbackend.google;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.calendar.Calendar.Builder;
import com.google.api.services.calendar.CalendarScopes;
public abstract class GoogleBaseAdapter {
private static final int GOOGLE_SECRET_PORT = 59431;
/** Application name. */
protected static final String APPLICATION_NAME = "ClubHelperVaadin";
/** Directory to store user credentials for this application. */
protected static final File DATA_STORE_DIR = new File(System.getProperty("catalina.base"), ".credentials");
/** Global instance of the JSON factory. */
protected static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
/**
* Global instance of the scopes required by this quickstart.
*
* If modifying these scopes, delete your previously saved credentials
*/
static final List<String> SCOPES = Arrays.asList(CalendarScopes.CALENDAR);
private static Credential credential;
protected final Logger log = LoggerFactory.getLogger(getClass());
/** Global instance of the {@link FileDataStoreFactory}. */
protected final FileDataStoreFactory DATA_STORE_FACTORY;
/** Global instance of the HTTP transport. */
protected final HttpTransport HTTP_TRANSPORT;
public GoogleBaseAdapter() throws GeneralSecurityException, IOException {
super();
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
if (DATA_STORE_DIR.mkdirs()) {
log.info("created DATA_STORE_DIR: {}", DATA_STORE_DIR.getAbsolutePath());
} else {
log.trace("DATA_STORE_DIR already exists.");
}
}
protected void checkRefreshToken(String serverName) throws IOException {
synchronized (SCOPES) {
if (credential == null) {
credential = Objects.requireNonNull(authorize(serverName));
}
}
if ((credential.getExpiresInSeconds() != null && credential.getExpiresInSeconds() < 3600)) {
if (log.isDebugEnabled()) {
log.debug("Security needs refresh, trying.");
}
boolean result = credential.refreshToken();
if (log.isDebugEnabled()) {
log.debug("Token refresh {}", (result ? "successfull." : "failed."));
}
}
}
public Builder createBuilder() {
if (credential == null) {
throw new IllegalStateException("credential is null, checkRefreshToken need to be called before.");
}
return new com.google.api.services.calendar.Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential);
}
public final boolean refreshToken() throws IOException {
return credential.refreshToken();
}
/**
* Creates an authorized Credential object.
*
* @param request
*
* @return an authorized Credential object.
* @throws IOException
*/
private Credential authorize(String serverName) throws IOException {
if (credential != null
&& (credential.getExpiresInSeconds() != null && credential.getExpiresInSeconds() < 3600)) {
credential.refreshToken();
return credential;
}
// Load client secrets.
InputStream in = getClass().getResourceAsStream("/client_secret.json");
if (in == null) {
File inHome = new File(System.getProperty("user.home"), "client_secret.json");
if (inHome.exists()) {
if (log.isInfoEnabled()) {
log.info("Google secret not found as Resource, using user Home file.");
}
in = new FileInputStream(inHome);
} else {
log.error("Failed to load client_secret.json. Download from google console.");
return null;
}
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
new InputStreamReader(in, Charset.defaultCharset()));
if (log.isTraceEnabled()) {
log.trace("client secret json resource loaded.");
}
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY,
clientSecrets, SCOPES).setDataStoreFactory(DATA_STORE_FACTORY).setAccessType("offline")
.setApprovalPrompt("force").build();
if (log.isDebugEnabled()) {
log.debug("Configuring google LocalServerReceiver on {}: {}", serverName, GOOGLE_SECRET_PORT);
}
LocalServerReceiver localServerReceiver = new LocalServerReceiver.Builder().setHost(serverName)
.setPort(GOOGLE_SECRET_PORT).build();
Credential auth = new AuthorizationCodeInstalledApp(flow, localServerReceiver).authorize("user");
if (log.isDebugEnabled()) {
log.debug("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
}
auth.setExpiresInSeconds(Long.valueOf(691200L));
return auth;
}
}

@ -1,175 +0,0 @@
package de.kreth.clubhelperbackend.google.calendar;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.springframework.stereotype.Component;
import com.google.api.client.util.DateTime;
import com.google.api.services.calendar.model.Calendar;
import com.google.api.services.calendar.model.CalendarList;
import com.google.api.services.calendar.model.CalendarListEntry;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.EventAttendee;
import de.kreth.clubhelperbackend.google.GoogleBaseAdapter;
import de.kreth.clubhelperbackend.google.calendar.CalendarResource.CalendarKonfig;
@Component
public class CalendarAdapter extends GoogleBaseAdapter {
com.google.api.services.calendar.Calendar service;
private Lock lock = new ReentrantLock();
private CalendarResource res;
public CalendarAdapter() throws GeneralSecurityException, IOException {
super();
res = new CalendarResource();
}
@Override
protected void checkRefreshToken(String serverName) throws IOException {
try {
if (lock.tryLock(10, TimeUnit.SECONDS)) {
try {
super.checkRefreshToken(serverName);
if (service == null) {
service = createBuilder().setApplicationName(APPLICATION_NAME).build();
}
} finally {
lock.unlock();
}
}
} catch (InterruptedException e) {
log.warn("Lock interrupted", e);
if (service == null) {
throw new IOException("Unable to create Service", e);
}
}
if (service == null) {
throw new IllegalStateException("Calendar Service not instanciated!");
}
}
Calendar getCalendarBySummaryName(List<CalendarListEntry> items, String calendarSummary) throws IOException {
String calendarId = null;
for (CalendarListEntry e : items) {
if (calendarSummary.equals(e.getSummary())) {
calendarId = e.getId();
break;
}
}
if (calendarId == null) {
throw new IllegalStateException("Calendar " + calendarSummary + " not found!");
}
return service.calendars().get(calendarId).execute();
}
public List<Event> getAllEvents(String serverName) throws IOException, InterruptedException {
final List<Event> events = new ArrayList<>();
List<CalendarListEntry> items = getCalendarList(serverName);
final long oldest = getOldest();
List<CalendarKonfig> configs = res.getConfigs();
ExecutorService exec = Executors.newFixedThreadPool(configs.size());
for (CalendarKonfig c : configs) {
exec.execute(new FetchEventsRunner(items, c.getName(), events, oldest, c.getColor()));
}
exec.shutdown();
try {
exec.awaitTermination(20, TimeUnit.SECONDS);
} catch (InterruptedException e) {
log.error("Thread terminated - event list may be incomplete.", e);
}
return events;
}
private long getOldest() {
GregorianCalendar oldestCal = new GregorianCalendar();
oldestCal.set(java.util.Calendar.DAY_OF_MONTH, 1);
oldestCal.set(java.util.Calendar.HOUR_OF_DAY, 0);
oldestCal.set(java.util.Calendar.MINUTE, 0);
oldestCal.add(java.util.Calendar.MONTH, -1);
oldestCal.add(java.util.Calendar.YEAR, -1);
oldestCal.add(java.util.Calendar.HOUR_OF_DAY, -1);
return oldestCal.getTimeInMillis();
}
List<CalendarListEntry> getCalendarList(String serverName) throws IOException {
checkRefreshToken(serverName);
CalendarList calendarList;
try {
calendarList = service.calendarList().list().execute();
} catch (IOException e) {
if (log.isWarnEnabled()) {
log.warn("Error fetching Calendar List, trying token refresh", e);
}
refreshToken();
if (log.isInfoEnabled()) {
log.info("Successfully refreshed Google Security Token.");
}
calendarList = service.calendarList().list().execute();
}
return calendarList.getItems();
}
private final class FetchEventsRunner implements Runnable {
private final List<Event> events;
private final long oldest;
private String colorClass;
private List<CalendarListEntry> items;
private String summary;
private FetchEventsRunner(List<CalendarListEntry> items, String summary, List<Event> events, long oldest,
String colorClass) {
this.events = events;
this.oldest = oldest;
this.items = items;
this.summary = summary;
this.colorClass = colorClass;
}
@Override
public void run() {
try {
log.debug("Fetching events of calendar \"{}\"", summary);
Calendar calendar = getCalendarBySummaryName(items, summary);
DateTime timeMin = new DateTime(oldest);
List<Event> eventItems = service.events().list(calendar.getId()).setTimeMin(timeMin).execute()
.getItems();
eventItems.forEach(item -> item.set("colorClass", colorClass));
events.addAll(eventItems);
log.debug("Added {} Events for \"{}\"", eventItems.size(), summary);
} catch (IOException e) {
log.error("Unable to fetch Events from {}", summary, e);
}
}
}
static Event createDefaultEvent(String summary) {
Event ev = new Event().setGuestsCanInviteOthers(false).setGuestsCanModify(false)
.setGuestsCanSeeOtherGuests(true).setSummary(summary);
List<EventAttendee> attendees = new ArrayList<>();
ev.setAttendees(attendees);
return ev;
}
}

@ -1,80 +0,0 @@
package de.kreth.clubhelperbackend.google.calendar;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
public class CalendarResource {
private Map<String, CalendarKonfig> configs;
public CalendarResource() throws IOException {
configs = new HashMap<>();
InputStream resStream = getClass()
.getResourceAsStream("/calendars.properties");
Properties prop = new Properties();
prop.load(resStream);
Enumeration<Object> keys = prop.keys();
String className = getClass().getName();
String packageName = className.substring(0, className.lastIndexOf('.'));
while (keys.hasMoreElements()) {
String key = keys.nextElement().toString();
String name = key.substring(packageName.length());
String value = prop.getProperty(key);
StringTokenizer tok = new StringTokenizer(name, ".");
name = tok.nextToken();
String type = tok.nextToken();
CalendarKonfig conf;
if (configs.containsKey(name)) {
conf = configs.get(name);
} else {
conf = new CalendarKonfig(null, null);
configs.put(name, conf);
}
switch (type) {
case "name" :
conf.name = value;
break;
case "color" :
conf.color = value;
break;
default :
break;
}
}
}
public List<CalendarKonfig> getConfigs() {
return new ArrayList<>(configs.values());
}
public static class CalendarKonfig {
private String name;
private String color;
CalendarKonfig(String name, String color) {
super();
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public String getColor() {
return color;
}
}
}

@ -1,98 +0,0 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.business;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.List;
import javax.validation.ConstraintViolationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import de.kreth.clubhelperbackend.google.calendar.CalendarAdapter;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.ClubEventDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
@Component
public class CalendarTaskRefresher {
public static final String SKIP_EVENT_UPDATE = "skipEventUpdate";
private static final long RATE = 1000L * 60 * 10;
private final Logger log = LoggerFactory.getLogger(getClass());
private final boolean skip = Boolean.parseBoolean(System.getProperty(SKIP_EVENT_UPDATE, "false"));
@Autowired
ClubEventDao dao;
@Autowired
CalendarAdapter calendarAdapter;
@Scheduled(fixedDelay = RATE)
public void synchronizeCalendarTasks() {
if (skip) {
return;
}
List<ClubEvent> list = loadEventsFromGoogle();
for (ClubEvent e : list) {
if (dao.get(e.getId()) == null) {
try {
log.trace("try inserting {}", e);
dao.save(e);
} catch (ConstraintViolationException | DataIntegrityViolationException ex) {
log.warn("Insert failed, updating {}", e);
dao.update(e);
}
} else {
log.trace("try updating {}", e);
dao.update(e);
}
log.debug("successfully stored {}", e);
}
}
public List<ClubEvent> loadEventsFromGoogle() {
log.debug("Loading events from Google Calendar");
List<ClubEvent> list = new ArrayList<>();
try (FileExporter ex = FileExporter.builder(log).setFileName("google_events.json").setAppend(false).disable()
.build()) {
String remoteHost = "localhost";
List<com.google.api.services.calendar.model.Event> events = calendarAdapter.getAllEvents(remoteHost);
for (com.google.api.services.calendar.model.Event ev : events) {
ex.writeLine(ev.toPrettyString());
if ("cancelled".equals(ev.getStatus())) {
log.debug("Cancelled: {}", ev.getSummary());
} else {
list.add(ClubEvent.parse(ev));
}
}
} catch (GeneralSecurityException | IOException | InterruptedException e) {
log.error("Error loading events from google.", e);
} catch (Exception e1) {
log.warn("Error closing " + FileExporter.class.getSimpleName(), e1);
}
return list;
}
public void setDao(ClubEventDao dao) {
this.dao = dao;
}
public void setCalendarAdapter(CalendarAdapter calendarAdapter) {
this.calendarAdapter = calendarAdapter;
}
}

@ -43,6 +43,9 @@ public class ClubEventDaoImpl extends AbstractDaoImpl<ClubEvent> implements Club
} else {
persons2 = new HashSet<>();
event.setPersons(persons2);
for (Person p : updated) {
event.add(p);
}
}
Query insertQuery = em.createNativeQuery(

@ -107,18 +107,18 @@ public class MainUi extends UI {
}
private void onItemClick(CalendarComponentEvents.ItemClickEvent event) {
ClubEvent ev = (ClubEvent) event.getCalendarItem();
LOGGER.debug("Opening detail view for {}", ev);
contentLayout.removeComponent(personGrid);
contentLayout.addComponent(personGrid);
eventBusiness.setSelected(null);
personGrid.setEnabled(false);
personGrid.setEvent(ev);
personGrid.setEnabled(true);
personGrid.setVisible(true);
eventBusiness.setSelected(ev);
// ClubEvent ev = (ClubEvent) event.getCalendarItem();
// LOGGER.debug("Opening detail view for {}", ev);
//
// contentLayout.removeComponent(personGrid);
// contentLayout.addComponent(personGrid);
//
// eventBusiness.setSelected(null);
// personGrid.setEnabled(false);
// personGrid.setEvent(ev);
// personGrid.setEnabled(true);
// personGrid.setVisible(true);
// eventBusiness.setSelected(ev);
}
}

@ -18,10 +18,8 @@ import java.util.stream.Collectors;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.CalendarTaskRefresher;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.ClubEventDaoImpl;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Adress;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Attendance;
@ -86,7 +84,7 @@ public abstract class CalendarCreator {
Locale.setDefault(Locale.GERMANY);
int year = 2019;
List<ClubEvent> allevents = loadAllEvents(true).stream().filter(ev -> {
List<ClubEvent> allevents = loadAllEvents().stream().filter(ev -> {
return ev.getStart().toLocalDate().getYear() <= year && ev.getEnd().toLocalDate().getYear() >= year;
}).collect(Collectors.toList());
@ -160,24 +158,14 @@ public abstract class CalendarCreator {
txt.append(ev.getCaption());
}
public static List<ClubEvent> loadAllEvents(boolean withRefresh) {
public static List<ClubEvent> loadAllEvents() {
Configuration configuration = createConfig();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
ClubEventDaoImpl dao = new ClubEventDaoImpl();
dao.setEntityManager(session);
if (withRefresh) {
updateEventsFromGoogleCalendar(session, dao);
}
return dao.listAll();
}
public static void updateEventsFromGoogleCalendar(Session session, ClubEventDaoImpl dao) {
CalendarTaskRefresher refresh = new CalendarTaskRefresher();
refresh.setDao(dao);
Transaction tx = session.beginTransaction();
refresh.synchronizeCalendarTasks();
tx.commit();
return dao.listAll();
}
static Calendar toCalendar(long time) {

@ -6,12 +6,10 @@
<hibernate-configuration>
<session-factory>
<!-- SQL Dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!-- Database Connection Settings -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/clubhelperbackend</property>
<property name="cache.providerclass">org.hibernate.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
@ -19,6 +17,5 @@
<!-- Specifying Session Context -->
<property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property>
<!-- <mapping resource="schema/ClubEvent.hbm.xml"></mapping> -->
</session-factory>
</hibernate-configuration>

@ -54,7 +54,7 @@ public enum HibernateHolder {
}
public void mysqlTest(Configuration configuration) {
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
// configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
configuration.setProperty("hibernate.connection.url",
"jdbc:mysql://localhost/test?useUnicode=yes&characterEncoding=utf8&serverTimezone=Europe/Berlin");

@ -1,48 +0,0 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.business;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.util.Collections;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import de.kreth.clubhelperbackend.google.calendar.CalendarAdapter;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.ClubEventDao;
class CalendarTaskRefresherTest {
@Mock
private ClubEventDao dao;
@Mock
private CalendarAdapter calendarAdapter;
@BeforeEach
void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
when(calendarAdapter.getAllEvents(anyString())).thenReturn(Collections.emptyList());
}
@Test
void testSkip() throws IOException, InterruptedException {
System.setProperty(CalendarTaskRefresher.SKIP_EVENT_UPDATE, Boolean.FALSE.toString());
CalendarTaskRefresher r = new CalendarTaskRefresher();
r.setDao(dao);
r.setCalendarAdapter(calendarAdapter);
r.synchronizeCalendarTasks();
verify(calendarAdapter).getAllEvents(anyString());
System.setProperty(CalendarTaskRefresher.SKIP_EVENT_UPDATE, Boolean.TRUE.toString());
r = new CalendarTaskRefresher();
r.setDao(dao);
r.setCalendarAdapter(calendarAdapter);
r.synchronizeCalendarTasks();
verify(calendarAdapter).getAllEvents(anyString());
}
}

@ -26,7 +26,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import de.kreth.clubhelperbackend.google.calendar.CalendarAdapter;
import de.kreth.googleconnectors.calendar.CalendarAdapter;
import de.kreth.vaadin.clubhelper.HibernateHolder;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.AbstractDatabaseTest;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.AbstractDatabaseTest.DB_TYPE;

@ -9,7 +9,7 @@ import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import de.kreth.clubhelperbackend.google.calendar.CalendarAdapter;
import de.kreth.googleconnectors.calendar.CalendarAdapter;
import de.kreth.vaadin.clubhelper.HibernateHolder;
@Configuration

@ -36,7 +36,6 @@ import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWeb
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.server.LocalServerPort;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.CalendarTaskRefresher;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.AbstractDatabaseTest;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEventBuilder;
@ -71,7 +70,6 @@ public class VaadinClubhelperApplicationTests {
options = new ChromeOptions();
options.setHeadless(GraphicsEnvironment.isHeadless());
System.setProperty(CalendarTaskRefresher.SKIP_EVENT_UPDATE, Boolean.TRUE.toString());
}
@BeforeEach

Loading…
Cancel
Save