// Path: src/main/java/org/lbogdanov/poker/core/impl/SessionServiceImpl.java
// @Singleton
// public class SessionServiceImpl implements SessionService {
// 
//     @Inject
//     private EbeanServer ebean;
//     @Inject
//     private UserService userService;
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional(readOnly = true)
//     public boolean exists(String code) {
//         return ebean.find(Session.class)
//                     .where().eq("code", code)
//                     .findRowCount() != 0;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional(readOnly = true)
//     public Session find(Object id) {
//         return ebean.find(Session.class, id);
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional(readOnly = true)
//     public Session find(String code) {
//         return ebean.find(Session.class)
//                     .where().eq("code", code)
//                     .findUnique();
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional(readOnly = true)
//     public PagingList<Session> find(User user, String name, String orderBy, boolean ascending, int pageSize) {
//         // TODO union with sessions where the user has participated
//         Query<Session> query = ebean.find(Session.class);
//         ExpressionList<Session> expr = query.where().eq("author", user);
//         if (!Strings.isNullOrEmpty(name)) {
//             expr = expr.ilike("name", name);
//         }
//         query = ascending ? expr.orderBy().asc(orderBy) : expr.orderBy().desc(orderBy);
//         return new EbeanPagingList<Session>(query.findPagingList(pageSize));
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional
//     public Session create(String name, String description, String estimations) {
//         Session session = new Session();
//         session.setName(name);
//         session.setDescription(description);
//         session.setEstimates(estimations);
//         session.setCode(newCode(SESSION_CODE_LENGTH.asInt().or(SESSION_CODE_DEFAULT_LENGTH)));
//         session.setAuthor(userService.getCurrentUser());
//         ebean.save(session);
//         return session;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional
//     public void delete(Session session) {
//         ebean.delete(session);
//     }
// 
//     /**
//      * Generates a new alphanumeric code of a specified length which can be used to uniquely identify a session.
//      * 
//      * @param length the desired code length
//      * @return the new code
//      */
//     private String newCode(int length) {
//         Random rnd = new SecureRandom();
//         StringBuilder code = new StringBuilder(length);
//         do {
//             code.setLength(0);
//             while (code.length() < length) {
//                 if (rnd.nextBoolean()) { // append a new letter or digit?
//                     char letter = (char) ('a' + rnd.nextInt(26));
//                     code.append(rnd.nextBoolean() ? Character.toUpperCase(letter) : letter);
//                 } else {
//                     code.append(rnd.nextInt(10));
//                 }
//             }
//         } while (exists(code.toString()));
//         return code.toString();
//     }
// 
// }


import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.Random;
import javax.inject.Inject;
import org.jukito.JukitoRunner;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.lbogdanov.poker.core.impl.SessionServiceImpl;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.ExpressionList;
import com.avaje.ebean.Query;
import com.avaje.ebean.TxCallable;
package org.lbogdanov.poker.core;







/**
 * Tests for <code>SessionService</code> implementation.
 */
@Ignore
@RunWith(JukitoRunner.class)
public class SessionServiceTest {

    @Inject
// Path: src/main/java/org/lbogdanov/poker/core/impl/SessionServiceImpl.java
// @Singleton
// public class SessionServiceImpl implements SessionService {
// 
//     @Inject
//     private EbeanServer ebean;
//     @Inject
//     private UserService userService;
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional(readOnly = true)
//     public boolean exists(String code) {
//         return ebean.find(Session.class)
//                     .where().eq("code", code)
//                     .findRowCount() != 0;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional(readOnly = true)
//     public Session find(Object id) {
//         return ebean.find(Session.class, id);
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional(readOnly = true)
//     public Session find(String code) {
//         return ebean.find(Session.class)
//                     .where().eq("code", code)
//                     .findUnique();
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional(readOnly = true)
//     public PagingList<Session> find(User user, String name, String orderBy, boolean ascending, int pageSize) {
//         // TODO union with sessions where the user has participated
//         Query<Session> query = ebean.find(Session.class);
//         ExpressionList<Session> expr = query.where().eq("author", user);
//         if (!Strings.isNullOrEmpty(name)) {
//             expr = expr.ilike("name", name);
//         }
//         query = ascending ? expr.orderBy().asc(orderBy) : expr.orderBy().desc(orderBy);
//         return new EbeanPagingList<Session>(query.findPagingList(pageSize));
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional
//     public Session create(String name, String description, String estimations) {
//         Session session = new Session();
//         session.setName(name);
//         session.setDescription(description);
//         session.setEstimates(estimations);
//         session.setCode(newCode(SESSION_CODE_LENGTH.asInt().or(SESSION_CODE_DEFAULT_LENGTH)));
//         session.setAuthor(userService.getCurrentUser());
//         ebean.save(session);
//         return session;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     @Transactional
//     public void delete(Session session) {
//         ebean.delete(session);
//     }
// 
//     /**
//      * Generates a new alphanumeric code of a specified length which can be used to uniquely identify a session.
//      * 
//      * @param length the desired code length
//      * @return the new code
//      */
//     private String newCode(int length) {
//         Random rnd = new SecureRandom();
//         StringBuilder code = new StringBuilder(length);
//         do {
//             code.setLength(0);
//             while (code.length() < length) {
//                 if (rnd.nextBoolean()) { // append a new letter or digit?
//                     char letter = (char) ('a' + rnd.nextInt(26));
//                     code.append(rnd.nextBoolean() ? Character.toUpperCase(letter) : letter);
//                 } else {
//                     code.append(rnd.nextInt(10));
//                 }
//             }
//         } while (exists(code.toString()));
//         return code.toString();
//     }
// 
// }


// Path: src/test/java/org/lbogdanov/poker/core/SessionServiceTest.java
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.Random;
import javax.inject.Inject;
import org.jukito.JukitoRunner;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.lbogdanov.poker.core.impl.SessionServiceImpl;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.ExpressionList;
import com.avaje.ebean.Query;
import com.avaje.ebean.TxCallable;

package org.lbogdanov.poker.core;







/**
 * Tests for <code>SessionService</code> implementation.
 */
@Ignore
@RunWith(JukitoRunner.class)
public class SessionServiceTest {

    @Inject
    private SessionServiceImpl sessionService;