45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
defmodule Ecto.Integration.StreamTest do
 | 
						|
  use Ecto.Integration.Case, async: Application.compile_env(:ecto, :async_integration_tests, true)
 | 
						|
 | 
						|
  alias Ecto.Integration.TestRepo
 | 
						|
  alias Ecto.Integration.Post
 | 
						|
  alias Ecto.Integration.Comment
 | 
						|
  import Ecto.Query
 | 
						|
 | 
						|
  test "stream empty" do
 | 
						|
    assert {:ok, []} = TestRepo.transaction(fn() ->
 | 
						|
      TestRepo.stream(Post)
 | 
						|
      |> Enum.to_list()
 | 
						|
    end)
 | 
						|
 | 
						|
    assert {:ok, []} = TestRepo.transaction(fn() ->
 | 
						|
      TestRepo.stream(from p in Post)
 | 
						|
      |> Enum.to_list()
 | 
						|
    end)
 | 
						|
  end
 | 
						|
 | 
						|
  test "stream without schema" do
 | 
						|
    %Post{} = TestRepo.insert!(%Post{title: "title1"})
 | 
						|
    %Post{} = TestRepo.insert!(%Post{title: "title2"})
 | 
						|
 | 
						|
    assert {:ok, ["title1", "title2"]} = TestRepo.transaction(fn() ->
 | 
						|
      TestRepo.stream(from(p in "posts", order_by: p.title, select: p.title))
 | 
						|
      |> Enum.to_list()
 | 
						|
    end)
 | 
						|
  end
 | 
						|
 | 
						|
  test "stream with assoc" do
 | 
						|
    p1 = TestRepo.insert!(%Post{title: "1"})
 | 
						|
 | 
						|
    %Comment{id: cid1} = TestRepo.insert!(%Comment{text: "1", post_id: p1.id})
 | 
						|
    %Comment{id: cid2} = TestRepo.insert!(%Comment{text: "2", post_id: p1.id})
 | 
						|
 | 
						|
    stream = TestRepo.stream(Ecto.assoc(p1, :comments))
 | 
						|
    assert {:ok, [c1, c2]} = TestRepo.transaction(fn() ->
 | 
						|
      Enum.to_list(stream)
 | 
						|
    end)
 | 
						|
    assert c1.id == cid1
 | 
						|
    assert c2.id == cid2
 | 
						|
  end
 | 
						|
end
 |