diff --git a/app/models/wiki_directory.rb b/app/models/wiki_directory.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c126a4d0421fc76e7963e331c0c763eed78cdb85
--- /dev/null
+++ b/app/models/wiki_directory.rb
@@ -0,0 +1,13 @@
+class WikiDirectory
+  include ActiveModel::Validations
+
+  attr_accessor :slug, :pages, :directories
+
+  validates :slug, presence: true
+
+  def initialize(slug, pages = [], directories = [])
+    @slug = slug
+    @pages = pages
+    @directories = directories
+  end
+end
diff --git a/spec/factories/wiki_directories.rb b/spec/factories/wiki_directories.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3f3c864ac2b071142e2602afc7957a0d7fff7017
--- /dev/null
+++ b/spec/factories/wiki_directories.rb
@@ -0,0 +1,6 @@
+FactoryGirl.define do
+  factory :wiki_directory do
+    slug '/path_up_to/dir'
+    initialize_with { new(slug) }
+  end
+end
diff --git a/spec/models/wiki_directory_spec.rb b/spec/models/wiki_directory_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8362a285c54665fb8f2bd6e91d57e5b7b8fee728
--- /dev/null
+++ b/spec/models/wiki_directory_spec.rb
@@ -0,0 +1,45 @@
+require 'spec_helper'
+
+RSpec.describe WikiDirectory, models: true do
+  describe 'validations' do
+    subject { build(:wiki_directory) }
+
+    it { is_expected.to validate_presence_of(:slug) }
+  end
+
+  describe '#initialize' do
+    context 'when there are pages and directories' do
+      let(:pages) { [build(:wiki_page)] }
+      let(:other_directories) { [build(:wiki_directory)] }
+      let(:directory) { WikiDirectory.new('/path_up_to/dir', pages, other_directories) }
+
+      it 'sets the slug attribute' do
+        expect(directory.slug).to eq('/path_up_to/dir')
+      end
+
+      it 'sets the pages attribute' do
+        expect(directory.pages).to eq(pages)
+      end
+
+      it 'sets the directories attribute' do
+        expect(directory.directories).to eq(other_directories)
+      end
+    end
+
+    context 'when there are no pages or directories' do
+      let(:directory) { WikiDirectory.new('/path_up_to/dir') }
+
+      it 'sets the slug attribute' do
+        expect(directory.slug).to eq('/path_up_to/dir')
+      end
+
+      it 'sets the pages attribute to an empty array' do
+        expect(directory.pages).to eq([])
+      end
+
+      it 'sets the directories attribute to an empty array' do
+        expect(directory.directories).to eq([])
+      end
+    end
+  end
+end