Cassandra mock

mail@pastecode.io avatar
unknown
java
a year ago
2.5 kB
2
Indexable
Never
public class Customer 
{
  public int Id { get; set; }
  public string Name { get; set; }
  public int Age { get; set; }
}

public interface ICustomerRepository
{
  Customer GetCustomer(int id);
}

public class CustomerRepository 
  : ICustomerRepository
{
  private readonly ISession session;
  
  public CustomerRepository(ISession session)
  {
    this.session = session;
  }

  public Customer GetCustomer(int id)
  {
    var statement = session.Prepare("SELECT * FROM Customers WHERE Id = ?");
    var boundStatement = statement.Bind(id);
    
    var dbCustomers = session.Execute(boundStatement);
    foreach(var row in dbCustomers)
    {
      return Map(row);
    }
    
    return null;
  }
  
  private Customer Map(Row row)
  {
    return new Customer 
    {
      Id = row.GetValue<int>("Id"),
      Name = row.GetValue<string>("Name"),
      Age = row.GetValue<int>("Age")
    };
  }
}



private Mock<ISession> sessionMock;

[SetUp]
public void Setup()
{
    sessionMock = new Mock<ISession>();

    sessionMock.Setup(_ => _.Prepare(It.IsAny<string>())).Returns(new PreparedStatement());
}



    public static class RowSetHelper
    {
        public static RowSet CreateMockRowSet(params Row[] rows)
        {
            var mockList = new List<Row>();
            mockList.AddRange(rows);

            var rowSet = new Mock<RowSet>();
            rowSet.Setup(m => m.GetEnumerator()).Returns(mockList.GetEnumerator());

            return rowSet.Object;
        }

        public static Mock<Row> CreateMockRow()
        {
            var rowMock = new Mock<Row>();
            rowMock.Setup(m => m.GetValue<int>("Id")).Returns(1);
            rowMock.Setup(m => m.GetValue<int>("Age")).Returns(1);
            rowMock.Setup(m => m.Getvalue<string>("Name")).Returns("Test");

            return rowMock;
        }
    }



 [Test]
 public void Repository_GeCustomer_ReturnsValidCustomer()
 {
     var dataRowMock = RowSetHelper.CreateMockRow();
     sessionMock.Setup(m => m.Execute(It.IsAny<IStatement>())).Returns(RowSetHelper.CreateMockRowSet(dataRowMock.Object));
     var repository = new CustomerRepository(_sessionMock.Object);

     var customer = repository.GetCustomer(1);

     customer.Should().NotBeNull("because get customer should return mock value from session.");
     customer.Id.Should().Be(1, "because repository has a customer with id 1");
}