/**
 * Copyright (c) 2014, Thindeck.com
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met: 1) Redistributions of source code must retain the above
 * copyright notice, this list of conditions and the following
 * disclaimer. 2) Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided
 * with the distribution. 3) Neither the name of the thindeck.com nor
 * the names of its contributors may be used to endorse or promote
 * products derived from this software without specific prior written
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.thindeck.dynamo;

import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.jcabi.dynamo.Frame;
import com.jcabi.dynamo.Item;
import com.jcabi.dynamo.Region;
import com.jcabi.dynamo.Table;
import java.io.IOException;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.mockito.Mockito;

/**
 * Tests for {@link DyRepo}.
 *
 * @author Krzysztof Krason (Krzysztof.Krason@gmail.com)
 * @version $Id$
 */
public final class DyRepoTest {
    /**
     * DyRepo can create repo with provided name.
     */
    @Test
    public void createsRepoWithName() {
        final String name = "some name";
        final Item item = Mockito.mock(Item.class);
        final AttributeValue value = Mockito.mock(AttributeValue.class);
        Mockito.when(value.getS()).thenReturn(name);
        try {
            Mockito.when(item.get(DyRepo.ATTR_NAME)).thenReturn(value);
        } catch (final IOException ex) {
            throw new IllegalStateException(ex);
        }
        MatcherAssert.assertThat(
            new DyRepo(item).name(),
            Matchers.equalTo(name)
        );
    }
    /**
     * DyRepo can get {@code Tasks}.
     */
    @Test
    public void getTasks() {
        final Item item = Mockito.mock(Item.class);
        final Frame frame = Mockito.mock(Frame.class);
        final Table table = Mockito.mock(Table.class);
        final Region region = Mockito.mock(Region.class);
        Mockito.when(item.frame()).thenReturn(frame);
        Mockito.when(frame.table()).thenReturn(table);
        Mockito.when(table.region()).thenReturn(region);
        MatcherAssert.assertThat(
            new DyRepo(item).tasks(),
            Matchers.notNullValue()
        );
    }

    /**
     * {@link DyRepo#memo}.
     * @throws IOException transitively
     */
    @Test
    public void memo() throws IOException {
        final String memo = "<memo></memo>";
        final AttributeValue value = Mockito.mock(AttributeValue.class);
        final Item item = Mockito.mock(Item.class);
        Mockito.when(value.getS()).thenReturn(memo);
        Mockito.when(item.get(DyRepo.ATTR_MEMO)).thenReturn(value);
        MatcherAssert.assertThat(
                new DyRepo(item).memo(),
                Matchers.instanceOf(DyMemo.class)
        );
    }

}

@@ -1649,16 +1649,52 @@
 eValue;%0A
+import com.jcabi.dynamo.Attributes;%0A
 import c
@@ -1809,16 +1809,92 @@
 .Table;%0A
+import com.jcabi.dynamo.mock.H2Data;%0Aimport com.jcabi.dynamo.mock.MkRegion;%0A
 import j
@@ -3580,282 +3580,464 @@
 nal 
-String memo = %22%3Cmemo%3E%3C/memo%3E%22;%0A        final AttributeValue value = Mockito.mock(AttributeValue.class);%0A        final Item item = Mockito.mock(Item.class);%0A        Mockito.when(value.getS()).thenReturn(memo);%0A        Mockito.when(item.get(DyRepo.ATTR_MEMO)).thenReturn(value
+Region region = new MkRegion(%0A            new H2Data().with(%0A                    DyRepo.TBL,%0A                new String%5B%5D %7BDyRepo.ATTR_MEMO%7D,%0A                new String%5B%5D %7BDyRepo.ATTR_UPDATED%7D%0A            )%0A        );%0A        final Table table = region.table(DyRepo.TBL);%0A        table.put(%0A            new Attributes()%0A                .with(DyRepo.ATTR_MEMO, %22%3Cmemo%3E%3C/memo%3E%22)%0A                .with(DyRepo.ATTR_UPDATED, System.currentTimeMillis())%0A        
 );%0A 
@@ -4073,36 +4073,32 @@
 at(%0A            
-    
 new DyRepo(item)
@@ -4092,20 +4092,47 @@
  DyRepo(
-item
+table.frame().iterator().next()
 ).memo()
@@ -4129,28 +4129,24 @@
 ()).memo(),%0A
-    
             
@@ -4196,11 +4196,10 @@
 ;%0A    %7D%0A
-%0A
 %7D%0A

Use dynamo mocks in DyRepoTest#memo